根据子模型/关系对父模型排序

eiee3dmh  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(469)

我有一个模型叫 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');
    }
}

任何帮助都将不胜感激。

pdkcd3nj

pdkcd3nj1#

要按相关选项模型中的列对约会模型进行排序,您需要向查询中添加联接,以便可以按相关字段进行排序:

$appointments = $user->appointments()
  ->leftJoin('options', 'options.appointment_id', '=', 'appointments.id')
  ->orderBy('options.datetime_start', 'ASC')
  ->with(['option'])
  ->get();

这将为您提供所有约会,包括那些没有选项的约会-那些没有选项的约会,因此,没有datetime\u start,都将在结果列表的开头或结尾返回,您需要进行检查。如果您只想预约选项,请将leftjoin()替换为join()。

kmbjn2e3

kmbjn2e32#

$appointments = Appointment::with(['option' => function ($query){ $query->orderBy('datetime_start', 'desc'); } ])->get();

相关问题