Activerecord 如何消除yii-MANY\u-MANY关系中的列名歧义

Activerecord 如何消除yii-MANY\u-MANY关系中的列名歧义,activerecord,yii,disambiguation,Activerecord,Yii,Disambiguation,我有一个文件夹和文件夹中的项目很好的情况。为了清晰起见,所有mysql都缩写了 CREATE TABLE folder folder_id INT, name VARCHAR(32), sort_weight INT CREATE TABLE item item_id INT, name VARCHAR(32) 当然还有链接表 CREATE TABLE item_folder folder_id INT, item_id INT, sort_wei

我有一个文件夹和文件夹中的项目很好的情况。为了清晰起见,所有mysql都缩写了

CREATE TABLE folder
  folder_id INT,
  name VARCHAR(32),
  sort_weight INT

CREATE TABLE item
   item_id INT,
   name VARCHAR(32)
当然还有链接表

 CREATE TABLE item_folder
   folder_id INT,
   item_id INT,
   sort_weight INT
正如您可能猜到的,一个项目可以位于多个文件夹中(有点像linux文件系统中的硬链接),请注意,该文件夹也具有排序权重,因为它可以在另一个文件夹中排序。现在我正在使用Yii,我在项目模型中有一个很好的关系,如下所示:

public function relations()
{
    return array(
        'folderitems' => array(self::MANY_MANY, 'Folder', 'item_folder(item_id, folder_id)'),
    );
}
问题是,当我尝试提出一些好的AR请求并尝试对其进行排序时,我遇到了一个问题。我的AR请求:

$items = Item::model()->with(array(
  'folderitems' => array(
     'condition' => "folderitems.folder_id = $someid"
   ),
))->findAll(array('order'=> "folderitems.sort_weight"));
现在的问题是,使用这样的语法,它不是按项目排序,而是按文件夹排序

如果我将字段名称更改为item_folder.sort_weight2并尝试:

[...] ))->findAll(array('order'=> 'sort_weight2'));
它起作用了

但是如果我保持两个名字相同并尝试

[...] ))->findAll(array('order'=> 'item_folder.sort_weight'));
它显示
未知列

所以问题是-如何正确地消除歧义。

试试看

[...] ))->findAll(array('order'=> 't.sort_weight'));

当一个列名出现在连接在一起的两个或多个表中时,需要消除歧义。这是通过在列名前面加上其表别名来实现的

在关系AR查询中,主表的别名固定为t,而默认情况下,关系表的别名与对应的关系名相同。”