laravel livewire 异常:不支持具有多个模型连接的队列集合

Posted

技术标签:

【中文标题】laravel livewire 异常:不支持具有多个模型连接的队列集合【英文标题】:laravel livewire exception: Queueing collections with multiple model connections is not supported 【发布时间】:2021-06-29 17:59:23 【问题描述】:

我开始了我的 Livewire 之旅,并创建了一个列表组件,其中包含每个列表元素的表单组件,当我试图让这一切正常工作时,我不断收到以下从未见过的异常​​:

LogicException 具有多个模型连接的队列集合是 不支持。

我对我项目中的每个模型都使用相同的单一连接,并且我没有故意在我当前工作的任何组件中排队任何东西,所以我不知道从哪里开始调试这个异常。错误消息也没有多大帮助。事实上,我什至不知道要在这里发布什么来帮助我,除了发布整个项目......我想我只是在寻找关于从哪里开始寻找修复这个问题的任何线索,非常感谢任何帮助。

这是堆栈跟踪的错误消息:

C:\Users\bfcba\OneDrive\aplicaciones\duki\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Collection.php:705

public function getQueueableConnection()

    if ($this->isEmpty()) 
        return;
    

    $connection = $this->first()->getConnectionName();

    $this->each(function ($model) use ($connection) 
        if ($model->getConnectionName() !== $connection) 
            throw new LogicException('Queueing collections with multiple model connections is not supported.');
        
    );

    return $connection;

我很乐意发布您认为必要的所有信息。请告诉我。

提前致谢。

【问题讨论】:

忘了说,这个错误偶尔会在添加、更新或删除记录后刷新组件时发生。 【参考方案1】:

您可以通过在模型中设置连接来解决此问题

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ModelName extends Model

    protected $connection = "mysql";

【讨论】:

【参考方案2】:

当您从数据库中获取一个集合并尝试将一个新对象推送到该集合时,就会发生这种情况。

$this->members = $club->members;
$this->members->push(Member::make());

Livewire 论坛中的某个人建议将新对象的连接设置为集合对象使用的同一连接,然后再将其推送到所述集合。但是,这对我不起作用。

$this->members = $club->members;
$newMember = Member::make()->setConnection('mysql')
$this->members->push($newMember);

我发现的一种解决方法是使用数组而不是集合。

$this->members = $club->members->all();
$newMember = Member::make();
$this->members[] = $newMember;

【讨论】:

谢谢@howellmartinez。我不断地发现自己在使用 livewire 的死胡同里,所以我决定放弃这项技术并回到我更熟悉的 Laravel - Vue。干杯! FWIW,使用数组而不是推送到集合对我不起作用... @E.Barney 我很确定这是一个 Eloquent 错误而不是 Livewire 错误。这意味着如果你使用 Vue 前端做同样的事情,你会得到同样的错误。 github.com/illuminate/database/blob/master/Eloquent/…【参考方案3】:

您也可以将其转换为标准集合:

$this->members = new Collection($club->members);
$this->members->push(Member::make());

【讨论】:

以上是关于laravel livewire 异常:不支持具有多个模型连接的队列集合的主要内容,如果未能解决你的问题,请参考以下文章

Laravel(Livewire)中的组件拆分和保留参数

Laravel 8 和 Livewire - 查询不起作用

Laravel 与 JetStream 和 LiveWire 不渲染(尾风)

Laravel Livewire - 选择后选择输入数据丢失

添加 select2 插件以选择选项后。 Laravel Livewire 搜索不起作用

Laravel Livewire 增量减量不起作用