PHP Activerecord-在同一个表上连接
我正在使用php.activerecord,现在我试图在同一个表上创建一个连接,但不知怎么的,它不起作用 我想实现这样的目标:PHP Activerecord-在同一个表上连接,php,mysql,activerecord,join,phpactiverecord,Php,Mysql,Activerecord,Join,Phpactiverecord,我正在使用php.activerecord,现在我试图在同一个表上创建一个连接,但不知怎么的,它不起作用 我想实现这样的目标: 我有三个主要类别和nx子类别。我想做的是,加入这个表(如示例链接中所示),并实现如下功能: ID | Category | is a Subcategory of 1 | Main 1 | NULL 2 | Main 2 | NULL 3 | Main 3
我有三个主要类别和nx子类别。我想做的是,加入这个表(如示例链接中所示),并实现如下功能:
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')
);
及
但我只是得到了这个错误:
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')
);
但是还是一样的错误。我想你也需要一个
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));
文档将提供进一步的信息:
如果定义了一个关系,必须考虑2个键:外键和主键。在父->子关系的情况下,您还有两个关系:子关系有父关系,反之,父关系可以有子关系
第一个,您的属于_to
,将子项的id作为外键,父项的id作为主键。(顺便说一下,这在您的更新中看起来是错误的!)。但是第二个,也就是说父母有多个孩子,也有id字段作为主键,因为它是主键,是这个信息的“来源”。不要试图混淆它们,因为你会有一个“单向”或“另一种”关系,因为这里只有一个关系,但你要定义它两次:)
因此,请确保外键和主键都设置正确。自定义sql有帮助,但我现在如何访问该列?
$join = 'LEFT JOIN category c ON(category.category_id = c.parent_id)';
$categories = Category::all(array('joins' => $join));