Laravel - 预加载模型函数
Laravel - Eager loaded model function
我正在尝试使用 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 方包,它具有我正在使用的这些特征和线程 类。
解决方案
看起来我必须在获取集合时在最后添加 append('accessor_name')。
$collection = Auth::user()->relationship()->get()->append('accessor_name');
您可以覆盖 class。创建新模型并扩展包模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Thread extends \Lexx\ChatMessenger\Models\Thread
{
use HasFactory;
protected $appends=['latest_message'];
}
发布配置:
php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="config"
在config/chatmessenger.php
'thread_model' => \App\Models\Thread::class,
已更新
如果仍然没有获取属性数据,请不要忘记清除缓存
php artisan cache:clear
php artisan optimize
php artisan config:clear
php artisan clear
我正在尝试使用 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 方包,它具有我正在使用的这些特征和线程 类。
解决方案
看起来我必须在获取集合时在最后添加 append('accessor_name')。
$collection = Auth::user()->relationship()->get()->append('accessor_name');
您可以覆盖 class。创建新模型并扩展包模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Thread extends \Lexx\ChatMessenger\Models\Thread
{
use HasFactory;
protected $appends=['latest_message'];
}
发布配置:
php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="config"
在config/chatmessenger.php
'thread_model' => \App\Models\Thread::class,
已更新 如果仍然没有获取属性数据,请不要忘记清除缓存
php artisan cache:clear
php artisan optimize
php artisan config:clear
php artisan clear