【发布时间】:2011-02-23 00:26:08
【问题描述】:
我正在尝试使用 ORM 访问存储在三个 mysql 表“用户”、“项目”和多对多关系的数据透视表中的数据:“用户项目”
我遵循了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’在 '订单条款' [ SELECT
user_item.* 从user_item哪里user_id= '1' 和item_id= '' 订购user_item.idASC 限制 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 = '',它应该包含所有元素。
所以我的问题是我怎样才能访问存储在数据透视表中的数据,实际上我怎样才能访问特定用户持有的所有项目 因为我什至有问题?
谢谢
【问题讨论】:
-
你为什么要做
$user->items->find_all()?也许您忘记包含foreach语句(或类似语句)来迭代find_all()方法的结果。