从与“Lazy Eager Loading”的关系中返回第一个元素 [Laravel 5.2]
Posted
技术标签:
【中文标题】从与“Lazy Eager Loading”的关系中返回第一个元素 [Laravel 5.2]【英文标题】:Return first element from relation with `Lazy Eager Loading` [Laravel 5.2] 【发布时间】:2016-10-31 05:04:38 【问题描述】:我有这样的关系:
public function message()
return $this->hasMany('Engine\Message');
在我的Conversation
模型中。
对于每个对话,我都需要收到最后一条消息。
这是我尝试过的,但这只会在第一次对话中收到一条消息,但不会从其他对话中收到消息...
$con = Conversation::all();
$con->load(['message' => function ($q) use ( &$mess )
$mess = $q->first();
]);
return $con;
我不想查询每条记录...有人知道如何解决这个问题吗?
【问题讨论】:
这篇博文就是你的答案:softonsofa.com/… 添加->take(1)。它将返回一个仅包含 1 个项目的相关模型的数组/集合 【参考方案1】:试试
$con = Conversation::all();
$con->load(['message' => function ($q) use ( &$mess )
$q->orderBy('created_at', 'desc')->take(1);
// or if you don't use timestamps
// $q->orderBy('id', 'desc')->take(1)
]);
return $con;
【讨论】:
感谢您的尝试,但无法正常工作...在一次对话中它收到 1 条消息,但在其他对话中只是空白...【参考方案2】:如建议here!
不要在预加载中使用first()
或get()
,您应该在模型中创建一个新关系。
模型看起来像这样......
公共函数 message() return $this->hasOne('Engine\Message');
向“pmall”致敬
【讨论】:
以上是关于从与“Lazy Eager Loading”的关系中返回第一个元素 [Laravel 5.2]的主要内容,如果未能解决你的问题,请参考以下文章