我現在正在使用Kohana一段時間。我使用 「的has_many」, 「HAS_ONE」, 「belongs_to的」 沒有問題,我的問題是:Kohana - 驗證ORM(已解決)
如果我有2個表是這樣的:
tbl_foo1
id | tbl_foo2_id | field1
-------------------------
1 | 2 | bar
2 | 1 | foo
tbl_foo2
id | field1
-----------
1 | foo
2 | bar
我必須有這樣的關係:tbl_foo1屬於tbl_foo2和tbl_foo2有許多tbl_foo1 到目前爲止好。
問題是,當我嘗試保存在控制器的關係.. 所以我有這樣的代碼:
$t1 = ORM::factory('tbl_foo1')->values($values, $expected)->create();
$t2 = ORM::factory('tbl_foo2', $_POST['id']);
$t1->tbl_foo2_id = $t2;
$t1->save();
確定,這應該工作,但我認爲這不是最好的解決方案無論是最美麗的。出於兩個原因,1因爲性能 - 它有3個查詢(1節省$ t1,2節查找$ t2,3節節省$ 2與$ t1的關係)和2節因爲它可以節省空記錄,因爲它沒有' t驗證$ t2中記錄的存在。
所以我的主要問題是,這應該怎麼做?
謝謝先進。
自己的解決方案
我用biakaveron給我的解決方案,謝謝。 但儘管如此,有驗證問題..所以我花了一些時間,一個解決方案來了,使用相同的例子:在tbl_foo1
模型
$t2 = ORM::factory('tbl_foo2', $_POST['id']);
$t1 = ORM::factory('tbl_foo1')->values($values, $expected);
$t1->foo2 = $t2; // foo2 is a belongs_to relationship
$t1->create();
我加了規則功能:
public function rules()
{
'foo2_id' => array('not_empty')
}
所以這樣,我不必做另一個查詢,這對性能有好處,而且這是一個簡單的方法。它的工作原理是,因爲當ORM試圖找到模型tbl_foo2
的ID時,如果它沒有找到它,它將返回NULL,所以無論如何它總是空的!
注意:我也使用了DB事務(因爲這只是過程的一部分),所以如果其中一個查詢由於某種原因而中斷,那麼沒有查詢會運行。請記住,你必須使用一個支持事務的數據庫引擎(我的是InnoDB)。
我發現[這個問題](http://stackoverflow.com/questions/9574548/kohana-orm-validate-the-belongs-to-relationship-exists),這與我有關,但仍然存在性能問題.. Kohana必須有更好的方式來做到這一點! – TheGiantBeast 2012-07-19 18:50:07