2010-05-23 41 views
4

我想要使用ORM訪問存儲的數據,在三個mysql表'用戶','項目'和許多關係的數據透視表:'user_item'Kohana 3 ORM:如何從數據透視表中獲取數據?和所有其他表

我跟着從Kohana 3.0.x ORM: Read additional columns in pivot tables

指導,並試圖

$user = ORM::factory('user',1); 
    $user->items->find_all(); 

    $user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items)); 
    if ($user_item->loaded()) { 
     foreach ($user_item as $pivot) { 
      print_r($pivot); 
     }  
    } 

但我得到的SQL錯誤:

"Unknown column 'user_item.id' in 'order clause' [ SELECT user_item .* FROM user_item WHERE user_id = '1' AND item_id = '' ORDER BY user_item . id ASC LIMIT 1 ]"

這顯然是錯誤的,因爲Kohana試圖通過不存在的列來排列元素:user_item.id。此ID不存在,因爲此數據透視表的主鍵是另外兩個表(「用戶」和「項目」)的外鍵。

嘗試使用:

$user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items)) 
        ->order_by('item_id', 'ASC'); 

沒什麼區別,因爲它似乎在order_by()或者如果工廠的第二個參數給出任何SQL查詢被忽略。

該查詢的另一個明顯錯誤是item_id ='',它應該包含所有元素。

所以我的問題是我怎樣才能訪問存儲在數據透視表的數據,實際上我怎樣才能訪問特定用戶舉行,我甚至有與該問題的所有項目?

感謝

+0

你爲什麼要做'$ user-> items-> find_all()'?也許你忘了包含一個'foreach'語句(或類似的語句)來迭代find_all()方法的結果。 – dusan 2010-05-24 02:42:05

回答

2

默認情況下,所有的Kohana的ORM模型的期望表的主鍵是「身份證」。您需要在您的模型中將$ _primary_key設置爲其他值。

0

$user_item = ORM::factory('user_item', array('user_id' => $user, 'item_id' => $user->items));

我認爲你需要提供單一ITEM_ID值這個工作,而不是對象的數組。

另外,找到你應該能夠做到這一點的單個用戶的所有條目: $user_items = ORM::factory('user_item', array('user_id' => $user));

是否回答你的問題?

相關問題