【问题标题】:How to get model relations in Laravel?如何在 Laravel 中获取模型关系?
【发布时间】:2020-01-15 14:35:54
【问题描述】:

我想在数组中获取模型关系;

我的模型看起来像:

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']; 这可能吗?

【问题讨论】:

  • 您可能必须先加载它们:User::with(['profile', 'settings', 'addresses'])->find(1);。虽然不确定最终目标是什么,除非您在运行时明确加载/调用它们,否则不包括关系。
  • 是的,我找到了这个解决方案,但这是我最初的问题,我不想全部列出。
  • 如果我理解你想要一个指定的关系列表,对吧?
  • 我在模型中声明了函数,我想全部获取;

标签: laravel laravel-5


【解决方案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% 完全符合您的要求,但这可能是一个解决方案。

【讨论】:

  • 我喜欢这个解决方案,但我通过在类中插入一个变量解决了一个问题:$relations = [...];
  • Denis 的解决方案比使用变量要优雅得多。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 2020-09-13
  • 2016-08-20
  • 2016-09-26
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多