【问题标题】:Eager loading not working - Laravel急切的加载不起作用 - Laravel
【发布时间】:2015-01-29 11:21:51
【问题描述】:

我已经急切地加载了数据,但是当我使用 $object->attribute 时,它​​再次从数据库中获取数据。

我的查询是:

$user = User::with([ 'Comment' => function($query){ $query->where('active', 1); $query->with('CommentReply.User'); $query->orderBy('updated_at', 'desc'); } ]);

但是当我使用 $user->comment 时,它会再次加载所有 cmets,从而导致 N+1 问题。为什么会发生这种情况?提前致谢。

【问题讨论】:

    标签: laravel-4 eager-loading


    【解决方案1】:

    一切正常,只需遵守一个约定:

    $user = User::with([
                'comment' => function($query){
                    $query->where('active', 1);
                    $query->with('CommentReply.User');
                    $query->orderBy('updated_at', 'desc');
                }
    ]);
    
    //then
    $user->comment
    

    $user = User::with([
                'Comment' => function($query){
                    $query->where('active', 1);
                    $query->with('CommentReply.User');
                    $query->orderBy('updated_at', 'desc');
                }
    ]);
    
    //then
    $user->Comment
    

    通知信大小写。

    另外请注意,$comment->commentReply->user 也会这样做,因此您需要致电 $comment->CommentReply->User

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      相关资源
      最近更新 更多