2017-01-14 84 views
0

一个值,我有了这个查询在Laravel多数民众赞成返回所有论坛上一些额外的信息:Laravel得到渴望负荷

return Forum::with(['messages.user' => function($query){ 
    $query->select('id', 'name'); 
}])->withCount('messages')->paginate(10); 

但现在它急于加载所有相关的消息,以及,但我只需要作者从消息。我怎么能得到这个结果?

+0

我认为你不能使用这种渴望加载。 –

回答

0

没有预先加载,

//特定论坛

//获取一个论坛,实体

$forum = Forum::find($id); 

//获取其信息作为一个集合

$forumMessages = $forum->messages; 

//遍历集合上的每条消息以查找其作者。这将根据您在消息表中存储的'author_id'在User模型中查找id。集合$ forumMessages现在将具有作者的名称。这只是给你一个想法。根据您的需求结构。

$forumMessages->each(function ($message){ 
    $message->author = User::find($message->author_id)->name; 
}); 
0

尝试使用

return Forum::with([ 
    'messages' => function ($messages) { 
     return $messages->with([ 
      'user' => function ($user) { 
       return $user->select('id', 'name'); 
      } 
     ])->select('id', 'author'); // you get author from messages 
    } 
])->withCount('messages')->paginate(10); 

这也渴望加载,但你只能得到idauthor。需要id才能与用户建立关系。

+0

这看起来是最好的解决方案。但它会抛出一个错误:SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'name'(SQL:从'message'选择'id','name',其中'message'.' (1,2)中的forum_id') – Jenssen

+0

错误表明你正试图从'massage'表中得到'name'字段。检查你是否有这样的领域。 – Gayan

+0

是的,这是因为上一次''' - > select('id','author');'''当我删除它的工作,但它加载所有消息aswel。这就是我想要阻止的。 – Jenssen

0

假设你有你的Message模型中的表是messages,它具有列forum_iduser_id,并表为您User模式users你可以只定义一个belongsToMany并获得信息的方式:

public function users() 
{ 
    return $this->belongsToMany(User::class, 'messages')->distinct(); 
} 

则:

return Forum::with(['users' => function($query){ 
    $query->select('users.id', 'users.name'); 
}])->withCount('messages')->paginate(10); 

希望这有助于!