Laravel从急切的负载中获得一个值

时间:2017-01-14 18:42:27

标签: php laravel

我在Laravel中得到了这个问题,即所有论坛都返回了一些额外的信息:

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

但是现在它也渴望加载所有相关的消息,但我只需要消息中的作者。我怎么能得到这个结果?

3 个答案:

答案 0 :(得分:0)

没有急切加载,

//针对特定论坛

//获取论坛实体

var baseservices = list
        .GroupBy(l => l.Price)
        .Select(g => new
        {
            Price = g.Key,
            Dates = Convert(g.Select(d=>d.Date)).ToList()
        })
       .SelectMany(r=>r.Dates, (a,b)=>new Quote {
                              Price = a.Price, 
                              PeriodStart = b.PeriodStart, 
                              PeriodEnd = b.PeriodEnd})
       .ToList();

//将其消息作为集合

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

//迭代Collection上的每条消息以查找其作者。这将根据' author_id'在用户模型中查找ID。您存储在消息表中。集合$ forumMessages现在将具有作者的姓名。这只是为了给你一个想法。根据您的需求进行结构化。

$forumMessages = $forum->messages;

答案 1 :(得分: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才能与用户建立关系。

答案 2 :(得分:0)

假设您的'options' => array( 'Open Ceiling' => 'Open Ceiling', //key => value 'Drop Ceiling' => 'Drop Ceiling', //key => value 'Spot Cooling' => 'Spot Cooling', //key => value ) 模型所拥有的表格为Message,并且其中包含messagesforum_id列,以及user_id的表格模型是User你可以定义users并以这种方式获取信息:

belongsToMany

然后:

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

希望这有帮助!