我正在尝试使用ORM来访问存储的数据,在三个mysql表的“用户”,“项目”和多个关系的数据透视表中:'user_item'
我遵循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错误:
“未知列'user_item.id'中 'order clause'[SELECT
user_item
。* FROMuser_item
WHEREuser_id
='1' ANDitem_id
=''ORDER BYuser_item
。id
ASC限制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 :(得分:2)
默认情况下,所有Kohana的ORM模型都希望表的主键为“id”。您需要将模型中的$ _primary_key设置为其他内容。
答案 1 :(得分: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));
这会回答你的问题吗?