フォルダーとフォルダー内のアイテムの良いケースがあります。すべての 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
ご想像のとおり、1 つのアイテムが複数のフォルダー (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
ます。
問題は、それを正しく明確にする方法です。