【问题标题】:Laravel - Model Eloquent without relationshipsLaravel - 没有关系的模型 Eloquent
【发布时间】: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

标签: php laravel-8


【解决方案1】:

正如 laravel 文档所说,您可以使用 without: https://laravel.com/docs/8.x/eloquent-relationships

型号

protected $with = ['item1','item2','item3','item4'];

控制器

$events = Event::without(['item1','item2','item3','item4'])->get();

【讨论】:

  • 我试过这个,all() 不起作用,我需要使用 get() ,当我使用 get 时,我仍然得到我所有的关系
  • @Thapipo。好的,也许您也应该在模型中覆盖 setWith 函数
猜你喜欢
  • 2016-02-26
  • 2021-10-01
  • 2018-10-20
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2017-01-12
  • 1970-01-01
相关资源
最近更新 更多