Laravel - 热切加载模型功能

时间:2021-06-25 10:12:09

标签: php laravel api relationship eager

我正在尝试使用 Laravel 构建一些聊天系统,我有以下 2 个模型:用户和线程

用户模型具有 Messagable Trait,您可以在其中获取所有线程

$user->threads();

我正在尝试使用以下方法将附加数据急切加载到线程数组:

$threads = Auth::user()->threads()->with(['participants.user'])->get();

我正在努力的是 Threads 模型具有从中获取最新消息的功能:

$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();

我希望我澄清了这一点,因为我正在为这个系统使用 3rd 方包,其中包含我正在使用的这些 Traits 和 Thread 类。

解决方案

看起来我在获取集合时必须在最后添加 append('accessor_name') 。

$collection = Auth::user()->relationship()->get()->append('accessor_name');

1 个答案:

答案 0 :(得分:1)

您可以覆盖类。创建新模型并扩展包模型

<?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
相关问题