【问题标题】:Preload relationships in LaravelLaravel 中的预加载关系
【发布时间】:2018-09-26 03:41:17
【问题描述】:

我希望每次从我的UsersController 在我的应用程序中实例化User 时,它都会附带它所创建的关系。例如,UserbelongsToPersonUserhasManyForm。 这就是我现在处理我的对象的方式:

public function show( User $user ){
    $user->person;
    $user->forms;
    return view( 'admin.show', compact( 'user' ) );
}

但我不认为这是正确的做法。如果我能摆脱 $user->person;$user->forms; 那就太好了

我怎样才能完成它?

【问题讨论】:

  • 但是如果在服务器时间访问数据,你不需要急切地加载任何东西......有时人们在他们实际上不需要时使用“加载”。
  • @Amarnasan 是正确的,只要关系存在,您就不需要加载它。只需在模型/刀片中使用 $user->the_relation 访问它
  • 很遗憾,您没有将此作为答案发布,因为这与 Shridhar Sharma 的回答相结合,向我解释了很多。执行我所要求的正确方法是使用 load,但这不是必需的,因为我仍然可以在我的视图中使用 Eloquent。

标签: php laravel laravel-5 relationship


【解决方案1】:

您可以通过使用急切加载概念来做到这一点;

public function show( User $user ){
    $user->load(['person','forms']);
    return view( 'admin.show', compact( 'user' ) );
}

【讨论】:

  • 如果您(几乎)总是使用人员或表单数据,那么您应该考虑将它们定义为热切关系:Class MyModel extends Model { protected $with = ['person', 'forms']; }
  • 其实你的回答很有帮助。我在想,当在视图中时,我不允许使用雄辩的关系,并且传递给视图的所有内容都保持静态。非常感谢。
猜你喜欢
  • 2021-07-19
  • 2017-04-23
  • 2019-06-19
  • 1970-01-01
  • 2020-04-09
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
相关资源
最近更新 更多