gpt4 book ai didi

PHP Activerecord - 连接同一张表

转载 作者:行者123 更新时间:2023-11-29 08:06:55 25 4
gpt4 key购买 nike

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

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

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

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

但还是同样的错误。

最佳答案

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

第一个,您的 belongs_to,将使用子 ID 作为外键,并将父 ID 作为主键。 (顺便说一句,这在您的更新中看起来是错误的!)。
但是第二个,即父项有多个子项,也将 id 字段作为主键,因为它是主键,即该信息的“来源”。不要尝试将它们混合在一起,因为您将拥有“单向”或“另一种方式”关系,因为这里只有一种关系,但您定义了两次:)

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

关于PHP Activerecord - 连接同一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com