Mysql 根据子模型/关系对父模型排序
我有一个名为Mysql 根据子模型/关系对父模型排序,mysql,laravel,orm,model,eloquent,Mysql,Laravel,Orm,Model,Eloquent,我有一个名为约会的模型,每个约会都有一个通过一对一关系链接的选项id,并且选项id也可以是null。选项模型有一个属性datetime\u start。我想根据选项对约会进行排序。datetime\u start 这是我的密码: $appointments = $user->appointments() ->with(['option' ]) ->get(); 编辑: 任命模式: <?php namespace App; use Illuminate\Databas
约会
的模型,每个约会都有一个通过一对一关系链接的选项id
,并且选项id
也可以是null
。选项模型有一个属性datetime\u start
。我想根据选项对约会进行排序。datetime\u start
这是我的密码:
$appointments = $user->appointments()
->with(['option'
])
->get();
编辑:
任命模式:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Appointment extends Model
{
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function option()
{
return $this->hasOne(Option::class, 'id', 'option_id');
}
}
要按相关选项中的列对约会模型进行排序,您需要在查询中添加一个加入,以便您可以按相关字段进行排序:
$appointments = $user->appointments()
->leftJoin('options', 'options.appointment_id', '=', 'appointments.id')
->orderBy('options.datetime_start', 'ASC')
->with(['option'])
->get();
这将为您提供所有约会,包括那些没有选项的约会——那些没有选项的约会,因此,没有日期时间_start,都将在结果列表的开头或结尾返回,您需要检查一下。如果您只希望约会使用选项,请将leftJoin()替换为join()$appoints=Appointment::with(['Option'=>函数($query){$query->orderBy('datetime_start',desc');}])->get()代码>能否添加预约
和选项
型号的代码?这使你更容易理解问题。虽然这段代码可以回答问题,但提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
$appointments = $user->appointments()
->leftJoin('options', 'options.appointment_id', '=', 'appointments.id')
->orderBy('options.datetime_start', 'ASC')
->with(['option'])
->get();