从“Lazy Eager Loading”中回复第一个元素[Laravel 5.2]

时间:2016-06-28 18:16:35

标签: laravel eloquent laravel-5.2 eager-loading

我有这样的关系:

public function message()
{
   return $this->hasMany('Engine\Message');
}

在我的Conversation模型中。

我需要获得最后一条消息。

这是我尝试的内容,但这只会收到一条第一次通话的消息,但不会从其他会话中收到消息......

$con = Conversation::all();

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

return $con;

我不会对每条记录进行查询...任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

尝试

$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 :(得分:0)

  1. 使用api资源-> https://laravel.com/docs/5。* / eloquent-resources
  2. 定义访问器-> https://laravel.com/docs/5。* / eloquent-mutators
  3. 获取查询最新信息或您要查询的内容的访问器

答案 2 :(得分:0)

根据建议here

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

模型看起来像这样...

public function message()
{
return $this->hasOne('Engine\Message');
}

对“ pmall”表示敬意