Как получить модельные отношения в Laravel? - PullRequest
2 голосов
/ 15 января 2020

Я хотел бы получить отношения модели в массиве;

Моя модель выглядит так:

class User extends Model
{
    public function profile() {
        return $this->haOne(Profile::class);
    }

    public function settings() {
        return $this->morphOne(Settings::class, 'settingsable');
    }

    public function addresses() {
        return $this->hasMany(Addresses::class);
    }
}

И мой код:

$user = User::with(['profile', 'settings', 'addresses'])->find(1);
$user->getRelations(); // return ['profile', 'settings', 'addresses'];

Если я иметь более 10 отношений, я не хочу перечислять все. Я хотел бы получить так: $relations = ['profile', 'settings', 'addresses']; Это возможно?

1 Ответ

2 голосов
/ 15 января 2020

Вы можете попробовать добавить область действия в модель, и поэтому вам нужно написать их только один раз.

class User extends Model
{
    public function profile() {
        return $this->haOne(Profile::class);
    }

    public function settings() {
        return $this->morphOne(Settings::class, 'settingsable');
    }

    public function addresses() {
        return $this->hasMany(Addresses::class);
    }

   public function scopeWithRelations(Builder $query){
      return $query->with([...]);
   }

}

$users = User::withRelations()->get();

Таким образом, вам нужно будет написать их только один раз и везде в коде, который вы Я буду использовать прицел.

Не совсем на 100% то, что вы просите, но это может быть решением.

...