【问题标题】:Kohana 3 ORM: How to get data from pivot table? and all other tables for that matterKohana 3 ORM:如何从数据透视表中获取数据?以及与此相关的所有其他表格
【发布时间】: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.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 = '',它应该包含所有元素。

所以我的问题是我怎样才能访问存储在数据透视表中的数据,实际上我怎样才能访问特定用户持有的所有项目 因为我什至有问题?

谢谢

【问题讨论】:

  • 你为什么要做$user->items->find_all()?也许您忘记包含 foreach 语句(或类似语句)来迭代 find_all() 方法的结果。

标签: php mysql orm kohana


【解决方案1】:

默认情况下,Kohana 的所有 ORM 模型都期望表的主键是“id”。您需要将模型中的 $_primary_key 设置为其他内容。

【讨论】:

    【解决方案2】:

    $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));

    这能回答你的问题吗?

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多