Как получить модельные отношения в Laravel?

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

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

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 ответ


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

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% то, что вы просите, но это может быть решением.


Есть идеи?

10000