【问题标题】:Return first element from relation with `Lazy Eager Loading` [Laravel 5.2]从与“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 个项目的相关模型的数组/集合

标签: laravel eloquent laravel-5.2 eager-loading


【解决方案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”致敬

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 2021-10-17
    • 2020-05-23
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多