从与“Lazy-Eager-Loading”的关系中返回第一个元素[Laravel 5.2]

从与“Lazy-Eager-Loading”的关系中返回第一个元素[Laravel 5.2],laravel,eloquent,laravel-5.2,eager-loading,Laravel,Eloquent,Laravel 5.2,Eager Loading,我有这样的关系: public function message() { return $this->hasMany('Engine\Message'); } 在我的对话模型中 每次谈话我都需要得到最后一条信息 这是我尝试过的,但第一次对话只会收到一条消息,而其他对话不会收到消息 $con = Conversation::all(); $con->load(['message' => function ($q) use ( &$mess ) {

我有这样的关系:

public function message()
{
   return $this->hasMany('Engine\Message');
}
在我的
对话
模型中

每次谈话我都需要得到最后一条信息

这是我尝试过的,但第一次对话只会收到一条消息,而其他对话不会收到消息

$con = Conversation::all();

$con->load(['message' => function ($q) use ( &$mess ) {
                $mess = $q->first();
            }]);

return $con;
我不想查询每一条记录。。。有人知道如何解决这个问题吗

试试看

$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;
正如建议的那样

不要在急切加载中使用
first()
get()
,您应该在模型中创建新的关系

模型看起来像这样

public function message()
{
return $this->hasOne('Engine\Message');
} 公共函数消息()
{
返回$this->hasOne('Engine\Message');
}
感谢“pmall”

感谢您的尝试,但没有成功。。。在一次对话中,它收到一条信息,但在其他对话中,它只是一条空白……这篇博文就是你的答案:添加->获取(1)。它将返回仅包含1项的相关模型的数组/集合