2017-01-14 120 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); 

希望這有助於!