【问题标题】:PHP: Laravel how to eager load find methodPHP:Laravel如何急切加载查找方法
【发布时间】:2016-04-09 14:24:33
【问题描述】:

我有一个模型Users,它有很多Pages,我想急切加载下面的方法,以便它只返回一个用户,所有页面都急切加载,我该怎么做。

$user = User::find(1);
$pages = $user->pages();
foreach($pages as $page) {
  var_dump($page->name);
}

我尝试过但不起作用,它会加载所有内容:

$user = User::with('Pages')->get();
$pages = $user->pages();

【问题讨论】:

  • 你必须把它作为一个属性而不是一个函数来调用$user->pages
  • 哦,你还必须做 User::find(1)->with('Pages')->get();所以你只需要一个用户
  • @Bogdan pages 属于user
  • 还有用户hasMany 页面吗?
  • @FabioAntunes 我尝试了你的建议,User::find(1)->with('Pages')->get(); 改为返回一个集合

标签: php laravel eager-loading


【解决方案1】:

去掉括号。

$user = User::find(1);
$pages = $user->pages;
foreach($pages as $page) {
    var_dump($page->name);
}

如果您想立即加载它,请使用with 方法并传递正确的参数,这将是您的关系方法的名称:

$user = User::with('pages')->find(1);
foreach($user->pages as $page) {
    var_dump($page->name);
}

【讨论】:

  • 谢谢@ThomasKim,我真的很感激,按我的意愿工作
  • 这很有帮助。我错误地认为User::find(1)->with('pages'); 会以同样的方式工作。
  • 啊,我发现自己又回到了这个问题。这次是要了解这有效(camelCased):$contact = \App\Models\Contact::with('callFlow')->find($this->contactId); 而这无效:$contact = \App\Models\Contact::with('call_flow')->find($this->contactId);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2015-02-05
  • 2013-02-28
  • 2017-10-19
相关资源
最近更新 更多