【发布时间】:2021-09-08 17:59:46
【问题描述】:
我正在尝试使用 Laravel 构建一些聊天系统,我有这两种模型:用户和线程
User 模型具有 Messagable Trait,您可以在其中获取所有线程
$user->threads();
我正在尝试使用以下方法将额外的数据加载到线程数组中:
$threads = Auth::user()->threads()->with(['participants.user'])->get();
我正在努力的是线程模型具有从中获取最新消息的功能:
$thread->getLatestMessage();
我的问题是如何将这条最新消息附加到我正在执行的上层查询中。我正在尝试这样的事情,但它不行......我想我在这里做了一些愚蠢的事情......
$threads = Auth::user()->threads()->with([
'participants.user',
'latestMessage' => function ($query) {
return $query->getLatestMessageAttribute();
}])->get();
或
$threads = Auth::user()->threads()->with(['participants.user','getLatestMessageAttribute'])->get();
我希望我能澄清这一点,因为我正在为这个系统使用第 3 方包,它具有我正在使用的这些 Traits 和 Thread 类。
解决方案
看起来我在获取集合时必须在末尾添加 append('accessor_name')。
$collection = Auth::user()->relationship()->get()->append('accessor_name');
【问题讨论】:
-
尝试添加受保护的 $appends=['latest_message'];在线程模型中
-
我也在考虑这个问题......但问题是线程模型来自包供应商。我怎样才能修改它或用我自己的覆盖 Thread 模型
-
能否提一下包链接
标签: php laravel api relationship eager