我有一个名为appointments
的模型,每个约会都有一个通过一对一关系链接的option_id
,而option_id
也可以是null
。选项模型具有属性datetime_start
。我想根据option.datetime_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');
}
}
选项模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Option extends Model
{
protected $fillable = ["appointment_id",
"datetime_start"
];
public function appointment()
{
return $this->belongsTo(Appointment::class, 'id','appointment_id');
}
}
任何帮助将不胜感激。
答案 0 :(得分:0)
要通过相关 Option 模型中的列对约会模型进行排序,您需要向查询中添加 JOIN ,以便您可以按相关字段排序:
$appointments = $user->appointments()
->leftJoin('options', 'options.appointment_id', '=', 'appointments.id')
->orderBy('options.datetime_start', 'ASC')
->with(['option'])
->get();
这将为您提供所有约会,包括没有 Option 的约会-没有 Option 的约会,因此没有 datetime_start 的约会。所有返回的结果都在结果列表的开头或结尾,您需要检查一下。如果只希望使用 Option 进行约会,则将 leftJoin()替换为 join()。
答案 1 :(得分:0)
$appointments = Appointment::with(['option' => function ($query){ $query->orderBy('datetime_start', 'desc'); } ])->get();