dcat-admin saving问题求助
我现在有一个中间表关键,用来处理文章和标签,这里是显示的部分:
$form->tags('tags','标签')
->ajax('/search_tags?type=article')
->customFormat(function ($tags) {
// 遍历标签 ID 数组并获取标签名称
$tagsIds = \DB::table('tag_pivot')->where('source_id', $this->id)->where('type', 'article')->pluck('tag_id');
$tagNames = [];
foreach ($tagsIds as $tagId) {
$tag = Tag::find($tagId);
if ($tag) {
$tagNames[] = $tag->name;
}
}
// 将标签名称数组转换为逗号分隔的字符串并返回
return implode(', ', $tagNames);
})->required();
然后 saving 的时候处理一下,看看标签有没有,没有就新建:
$form->saving(function (Form $form) {
$tags = $form->input('tags');
// 在保存表单之前移除所有已存在的关系
$form->model()->tags()->detach();
// 删除 tags 输入数据以避免更新错误
$form->deleteInput('tags');
// 确保 $tags 是一个数组
if (!is_array($tags)) {
$tags = [];
}
$tags = array_filter($tags);
// 存储已经存在的标签 ID 和新创建的标签
$tagIds = [];
// 遍历标签并处理
foreach ($tags as $tag) {
if (is_numeric($tag)) {
$tagIds[] = $tag;
} else {
$verifyTag = Tag::firstOrCreate(['name' => $tag]);
$tagIds[] = $verifyTag->id;
}
}
// 将标签 ID 存储在表单对象的一个属性中
$form->_tagIds = $tagIds;
});
然后 saved 的时候处理关联关系:
$form->saved(function (Form $form) {
// 使用存储在表单对象中的标签 ID
$tagIds = $form->_tagIds;
// 更新标签中间表关联关系
$form->repository()->model()->tags()->attach($tagIds,['type' => 'article']);
// 更新标签的发布量
foreach($tagIds as $tagId) {
$tagCount = \DB::table('tag_pivot')->where('tag_id', $tagId)->count();
$tagDate = Tag::find($tagId);
if($tagDate) {
$tagDate->post_count = $tagCount;
$tagDate->save();
}
}
});
推荐文章: