【发布时间】:2021-03-29 18:57:27
【问题描述】:
我试图从没有关系的模型中加载所有行。
属性 $with it 不是在我的事件模型上设置的事件,但是当我这样做时
$events = Event::all();
我的所有关系都已加载,我可以使用 dbquerylog 查看所有查询。
我不明白为什么要加载这些关系,
请帮帮我! 谢谢你。
我正在使用 Laravel 8。
这是一个例子。
class Event extends Model {
public function items() {
return $this->hasMany(Item::class);
}
public function items2() {
return $this->hasMany(Item2::class);
}
public function items3() {
return $this->hasMany(Item3::class);
}
public function items4() {
return $this->hasOne(Item4::class);
}
}
$events = Event::all();
【问题讨论】:
-
该代码不应加载任何关系。你的代码后面有
foreach($events as $event)吗?你是通过DB::enableQueryLog(); $events = Event::all(); dd(DB::getQueryLog());测试这个吗?您应该只会看到带有该代码的SELECT * FROM events;查询。 -
我确实检查了这个,我可以出售所有关系的所有查询,它的疯狂,我不知道为什么,我一直在我的桌子上敲我的头,你说过,我的关系不可能被加载
-
@TimLewis,嗯,没错,我在做一个 foreach 之后,但是一旦我得到我的集合,我就在做 ->toArray(),然后遍历数组变量而不是集合变量
-
您的模型中没有
protected $with = [...];,对吧?我看不出你的关系会被加载的任何其他原因;这不是 Laravel 默认的行为... -
另一个你可以试试的例子,
dd(Event::first()->relationLoaded('items'));,应该是false。或者,在一个循环中:foreach(Event::all() as $event){ Log::info($event->relationLoaded('items') ? 'Yes' : 'No'); };应该在storage/logs/laravel.log(或laravel-{date}.log)中看到一堆No