laravel - 两个字段在 Laravel CRUD 中保存时覆盖彼此的值(spatie/laravel-tags 实现问题)?
问题描述
我正在尝试将 spatie/laravel-tags 与 Backpack for Laravel 一起使用。我定义了两种类型的标签。目前,我已将来自 spatie/laravel-tags 的 Tag 模型扩展为 MyCategory 和 MyTag,并添加了全局范围来分隔两种标签类型。这在一定程度上可以在 Backpack 中正确显示当前类别和标签,但是当我尝试保存任何更改时,它只会保存最后一个字段中的条目,并删除第一个字段中的所有内容。
这是我当前的 CRUD 字段配置:
$this->crud->addField([
'name' => 'categories',
'label' => 'Categories',
'type' => 'select2_multiple',
'tab' => 'Overview',
'attribute' => 'name',
'model' => 'App\MyCategory',
'pivot' => true,
]);
$this->crud->addField([
'name' => 'tags',
'label' => 'Tags',
'type' => 'select2_multiple',
'tab' => 'Overview',
'attribute' => 'name',
'model' => 'App\MyTag',
'pivot' => true,
]);
当我检查 Laravel Telescope 时,我发现这两个领域都发生了同样的事情。首先,我正在保存的项目的所有当前标签(无论类型)都被删除,并添加来自该字段的新标签。然后对第二个字段重复此操作,这当然会从第一个字段中删除也应保留的标签。
我的扩展标签模型上的 GlobalScope 似乎并没有在这部分停留。有没有办法将范围重新引入背包运行的查询中以正确保存这些标签?
解决方案
在我的 CrudController 中,我创建了自定义更新和存储功能。请参阅下面的更新示例。这似乎工作正常。仍然有 2 个查询正在运行,第二个查询撤消了第一个查询,但就我而言,这是一个足够好的解决方法,可以使用 spatie/laravel 在 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;
}
推荐阅读
- c# - 我想让 StreamingAssets 的 png 图像成为材质的纹理
- python - Python Pandas groupby,具有不同值的日期列,然后返回一个数据框,其中日期列填充最新日期
- ms-access - 想要显示一个包含 100 个数据项(10 个字段和 10 条记录)的表格,每个值都有自己的背景颜色
- youtube-api - Youtube 品牌帐户不能使用内部 youtube API 客户端
- mysql - 我正在尝试使用以下代码从 NodeJS 连接到 Google 云 SQL 实例
- python - 如何将 .png 文件从我的 python 应用程序发送到 google dialogflow webhook
- android - 与 Android Studio 的拖动编辑兼容的自定义布局?
- javascript - 为什么我可以在一个函数中访问我的合约,但不能在另一个函数中访问我的合约
- c++ - C ++如何从向量列表中选择一个随机变量?
- swift - TVDigitEntryViewController - 只能选择第一个数字