我有一个很好的文件夹和文件夹中的项目。为了清楚起见,所有 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 文件系统中的硬链接),并注意文件夹也有 sort_weight 因为它可以在另一个文件夹中排序。现在我正在使用 Yii,我在 Item 模型中有一个很好的关系,如下所示:
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_weight 排序,而是按 folder.sort_weight 排序。
如果我将字段名称更改为 item_folder.sort_weight2 并尝试:
[...] ))->findAll(array('order'=> 'sort_weight2'));
有用。
但是,如果我保持两个名称相同并尝试
[...] ))->findAll(array('order'=> 'item_folder.sort_weight'));
它说unknown column
。
所以问题是 - 如何正确消除歧义。