day: id
task: id
day_task: day_id, task_id, weight
现在我想从按重量排序的特定日期获取所有任务.
public function getTasks()
{
return $this->hasMany(Task::className(), ['id' => 'task_id'])->viaTable('day_task', ['day_id' => 'id'], function ($query) {
$query->orderBy(['weight' => SORT_ASC]);
});
}
导致:
SELECT * FROM `day_task` WHERE `day_id`=2 ORDER BY `weight`
SELECT * FROM `task` WHERE `id` IN ('2', '1', '3', '4')
问题是DBMS返回存储在表中的行而不考虑IN的顺序,所以我得到’1′,’2′,’3′,’4’而不是’2′,’1 ‘,’3′,’4’.
除了手动逐行取出之外,我找不到任何解决方案.
解决方法:
public function getTasks()
{
return $this->hasMany(Task::className(), ['id' => 'task_id'])- >viaTable('day_task', ['day_id' => 'id'])->orderBy(['weight' => SORT_ASC];
}