Я хотел бы получить отношения модели в массиве;
Моя модель выглядит так:
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% то, что вы просите, но это может быть решением.