两个字段在为 Laravel CRUD 保存在背包中时相互覆盖值(spatie/laravel-tags 实现问题)?



我正在尝试将spatie/laravel标签与Laravel的背包一起使用。我定义了 2 种类型的标签。目前,我已经将标签模型从spatie/laravel-tags扩展为MyCategory和MyTag,并添加了全局范围来分隔这两种标签类型。这在一定程度上可以正常工作,它将在 Backpack 中正确显示当前类别和标签,但是当我尝试保存任何更改时,它只会保存最后一个字段中的条目,并删除第一个字段中的所有内容。

这是我当前对 CRUD 的字段配置:

$this->crud->addField([
'name' => 'categories',
'label' => 'Categories',
'type' => 'select2_multiple',
'tab' => 'Overview',
'attribute' => 'name',
'model' => 'AppMyCategory',
'pivot' => true,
]);
$this->crud->addField([
'name' => 'tags',
'label' => 'Tags',
'type' => 'select2_multiple',
'tab' => 'Overview',
'attribute' => 'name',
'model' => 'AppMyTag',
'pivot' => true,
]);

当我检查拉拉维尔望远镜时,我看到两个领域都发生了同样的事情。首先,删除我正在保存的项目的所有当前标签(无论类型如何(,并添加字段中的新标签。然后对第二个字段重复此操作,这当然会从第一个字段中删除也应保留的标签。

似乎我的扩展标签模型上的 GlobalScope 并没有在这一部分停留。有没有办法将范围重新引入背包运行的查询中,以使这些标签正确保存?

在我的CrudController中,我创建了自定义更新和存储函数。请参阅下面的更新示例。这似乎工作正常。仍然有 2 个查询正在运行,第二个查询撤消了第一个查询,但就我而言,这是一个足够好的解决方法,能够使用 spatie/laravel-tag 在 Backpack 中以相同的形式拥有 2 个具有不同标签类型的字段。

public function update(UpdateRequest $request)
{
$request = request();
// Merge the values from the two tag fields together into the second field
$request->merge(['tags' => array_merge((array)$request->input('categories'), (array)$request->input('tags'))]);
$redirect_location = $this->traitUpdate($request);
return $redirect_location;
}

最新更新