如果表中不存在新的帖子标签,则存储它?

时间:2017-07-10 04:18:14

标签: laravel laravel-5

我在博客文章表单中有一个输入字段(使用select2插件),允许用户从表格中的现有标签插入帖子标签或创建新标签并将其存储在标签表格中,并将它们附加到帖子中当他们点击提交帖子按钮。我已经设法通过使用array_filter()过滤输入来完成此工作,如果输入为!is_numeric,则输入将首先存储在Tag表中,然后将id附加到帖子。

这个问题是,当输入中的新标记是完全数字类型时,它不起作用,例如2017标记。是否有解决方案使这个工作,所以新标签不仅限于字符串,还包括数字类型?如果可能的话,我不想使用任何包。

邮寄方法:

public function store(PostsReq $request) {
        $input = $request->all();
        $post = Post::create($input);

        //Handle the tags
        $getTags = $request->input('tagspivot');
        $oldTags = array_filter($getTags, 'is_numeric');
        $newTags = array_filter($getTags, function($item) {
            return !is_numeric($item);
        });
        foreach ($newTags as $newTag) {
            if ($tag = Tag::create(['title' => strtolower(trim($newTag))])) {
                $oldTags[] = $tag->id;
            }
        }
        $post->tags()->attach($oldTags);

        // Upload Image
        if ($request->hasFile('image')) {
            $input['image'] = $this->uploadImage($request, $post);
        }
        return redirect()->route('postindex')->with($this->postStoreSuccess);
    }

1 个答案:

答案 0 :(得分:0)

以下三行代码绰绰有余:

    $tag = Tag::firstOrCreate([
        'title' => $request->input('tagspivot'),
    ]);

您不需要检查!is_numeric。但是,在您的表单中,请勿使用标记ID作为值。使用标题。