2017-07-10 8 views
0

ブログの投稿フォームに1つの入力フィールド(select2プラグインを使用)があります。これにより、ユーザーはテーブルの既存のタグから投稿タグを挿入したり、新しいタグを作成してタグテーブルに保存したり、投稿ポストボタンを押す。私はarray_filter()で入力をフィルタリングすることによってこの仕事を得ることができました。もし入力が!is_numericであれば、入力は最初にタグテーブルに格納され、次に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); 
    } 

答えて

0

ここでは、3行のコードは、十分以上になります:

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

あなたは!is_numericをチェックする必要はありません。しかし、あなたのフォームではタグIDを値として使用しないでください。タイトルを使用してください。

関連する問題