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();