【问题标题】:PHP Activerecord - Join on the same tablePHP Activerecord - 在同一张表上加入
【发布时间】:2014-03-20 14:43:58
【问题描述】:

我正在使用 php.activerecord,现在我正在尝试加入同一张桌子,但不知何故它不起作用。

我想实现这样的目标:
http://sqllessons.com/categories.html

我有三个主要类别和 n x 个子类别。我想要做的是,加入这个表(如示例链接中)并实现这样的目标:

ID     |     Category     |     is a Subcategory of
1      | Main 1           | NULL
2      | Main 2           | NULL
3      | Main 3           | NULL
4      | Sub 1            | Main 1
5      | Sub 2            | Main 2
6      | Sub 3            | Main 1

我已经尝试通过模型在同一张表上进行简单的连接

 static $has_many = array(
    array('category')
 );

$data = Category::all(array('joins' => array('category')));  

但我只是得到这个错误:

Fatal error: Uncaught exception 'ActiveRecord\DatabaseException' with message 'exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'rezepte_category'' in /home/www/xxxxx/xxxxx/classes/activerecord/lib/Connection.php on line 325    

任何人的想法?

更新 1:
显然我必须设置一个别名。我这样做了:

    static $has_many = array(
    array('subcategory', 'class'=>'category','foreign_key' => 'id')
);  

但还是同样的错误。

【问题讨论】:

    标签: php mysql activerecord join phpactiverecord


    【解决方案1】:

    如果定义关系,则必须考虑 2 个键:外键和主键。在 parent->child 关系的情况下,您也有 2 个关系:孩子有父母,反之,父母可以有孩子。

    第一个,您的belongs_to,将以孩子的 id 作为外键,以父母的 id 作为主键。 (顺便说一下,这在您的更新中看起来有问题!)。
    但是第二个,说父母有多个孩子,也有 id 字段作为主键,因为 主键,该信息的“来源”。不要试图混淆它们,因为你会有“一种方式”或“另一种方式”的关系,因为这里只有一个关系,但你定义了两次 :)

    因此,请确保您的外键和主键都设置正确。

    【讨论】:

      【解决方案2】:

      我想你也需要一个

      static $belongs_to = array(array('category'));
      

      在您的模型中。如果这没有帮助,您可能需要尝试自定义 sql 连接:

      $join = 'LEFT JOIN category c ON(category.category_id = c.parent_id)';
      $categories = Category::all(array('joins' => $join));
      

      文档将提供更多信息:http://www.phpactiverecord.org/projects/main/wiki/Finders#joins

      【讨论】:

      • 自定义 sql 有帮助,但我现在如何访问该列?
      猜你喜欢
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多