У меня есть модель Школа, у которой есть отношение ownToMany:
class School extends Model
{
protected $fillable = [
"url",
"title",
"is_own",
];
public function events()
{
return $this->belongsToMany(Event::class, "event_school");
}
}
Как я могу заказать школу по полю start_at события? Например, могу ли я сделать так?
School::whereHas("events")
->with([
"events" => function ($query) {
$query->latest("start_at")->limit(4);
},
"events.address"
])->orderBy("events.start_at")->paginate(4);
Это возможно? Подскажите пожалуйста как это реализовать. спасибо.
UPD: Я пытаюсь с объединением, да, это работает, но не правильно:
Schools::whereHas("events")
->select("schools.*")
->join("event_school", "schools.id", "=", "event_school.school_id")
->join("events", function ($join) {
$join->on("events.id", "=", "event_school.event_id")
->whereDate("events.start_at", ">=", Carbon::now()->format("Y-m-d"))
->limit(4);
})
->join("addresses", "events.address_id", "=", "addresses.id")
->groupBy("schools.id")
->orderBy("events.start_at")
Я получаю все события. ->whereDate("events.start_at", ">=", Carbon::now()->format("Y-m-d"))
не работают и не загружаются адреса