简体   繁体   中英

Laravel - Model Eloquent without relationships

i trying to load all rows from a model without the relationship.

The attributes $with it not event set on my Event model but when i do

$events = Event::all();

all my relationship are loaded, and i can see all the query with the dbquerylog.

i don't understand why theses relationship are loaded,

Please help me. Thanks you.

I'm using Laravel 8.

here's an example.

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();

I met this problem one day, and it turned out that I was using relation in scope method. Because of this relation values were added to response.

Check out this example:

class Event extends Model {

  public function items() {
    return $this->hasMany(Item::class);
  }

  [...]

  public function scopeItemsGreen() {
    return $this->items->every(function ($item) {
      return $item->color == 'green';
  });
}

If you have a single instance of a model object, you can do:

$obj->withoutRelations();

As laravel documentations says you can use without : https://laravel.com/docs/8.x/eloquent-relationships

Model

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

Controller

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM