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

E. *_*ney 6 laravel laravel-livewire

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

\n
\n

LogicException 不支持对具有多个模型连接的集合\n进行排队。

\n
\n

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

\n

这是错误消息堆栈跟踪:

\n
\n

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

\n
\n
public function getQueueableConnection()\n{\n    if ($this->isEmpty()) {\n        return;\n    }\n\n    $connection = $this->first()->getConnectionName();\n\n    $this->each(function ($model) use ($connection) {\n        if ($model->getConnectionName() !== $connection) {\n            throw new LogicException(\'Queueing collections with multiple model connections is not supported.\');\n        }\n    });\n\n    return $connection;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

提前致谢。

\n

how*_*nez 6

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

$this->members = $club->members;
$this->members->push(Member::make());
Run Code Online (Sandbox Code Playgroud)

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

$this->members = $club->members;
$newMember = Member::make()->setConnection('mysql')
$this->members->push($newMember);
Run Code Online (Sandbox Code Playgroud)

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

$this->members = $club->members->all();
$newMember = Member::make();
$this->members[] = $newMember;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你@howellmartinez。我不断地发现自己在使用 Livewire 时陷入了死胡同,所以我决定放弃该技术并回到我更熟悉的 Laravel - Vue。干杯! (2认同)

小智 6

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

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ModelName extends Model
{
    protected $connection = "mysql";
}
Run Code Online (Sandbox Code Playgroud)