我有一个模型School,其中有一个EmiratesToMany关系:
create table temp_ns as
select nearbystopname,latitude,longitude,mainaddress,row_number() over (partition by nearbystopname,mainaddress) as seqnum
from DUSAgeocodeDB.nearbystops ns;
truncate table DUSAgeocodeDB.nearbystops ns; -- SAVE first!!!
insert into DUSAgeocodeDB.nearbystops (nearbystopname,mainaddress)
select nearbystopname,mainaddress
from temp_ns
where seqnum = 1;
如何通过活动start_at字段订购学校?例如,我可以这样吗?
class School extends Model
{
protected $fillable = [
"url","title","is_own",];
public function events()
{
return $this->belongsToMany(Event::class,"event_school");
}
}
可以吗?请告诉我如何实施。谢谢。
UPD: 我尝试使用join,是的,但是不能正常工作:
School::whereHas("events")
->with([
"events" => function ($query) {
$query->latest("start_at")->limit(4);
},"events.address"
])->orderBy("events.start_at")->paginate(4);
我会得到所有事件。 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")
无法正常工作,也无法加载地址