記事とタグを持つ小さなブログアプリがあります。これまでのところ空想はありません。すべての記事は多くのタグを持つことができます。VuexとLaravel 5:記事からタグを削除するには
Laravelバックエンドは、VueフロントエンドのAxiosからのAPI呼び出しによってデータを配信します。 Laravelモデルでは、記事にはメソッドがあります。
public function tags(){
return $this->belongsToMany('App\Tag');
}
(逆も同様です)。私はピボットテーブルを持っており、これらのすべてはかなり与えられた例に従いますhttps://laracasts.com/series/laravel-5-fundamentals/episodes/21 これはすべて正常に動作します。
ここで、記事とタグの間の接続を削除するメソッドdeleteTag()をVueで呼び出すとしましょう。 PHPの "addTag"は新しいTag Modelを追加し、Pivotテーブル内のTagとArticle間の接続をORで連結します。
これを達成する最も良い方法は何ですか?これまで何をしている - 私
:
ArticleTags.vue
deleteTag(tagName){
let articleId = this.articleId;
this.$store.dispatch('removeTagFromArticle', { articleId, tagName });
},
index.js(Vuex店)
actions: {
removeTagFromArticle(context,param) {
axios.post('api/articles/delete-tag/', param)
.then((res) => {
let article = context.getters.getArticleById(param.articleId);
let tagName = param.tagName;
context.commit('deleteTag', {article, tagName});
})
.catch((err) => console.error(err));
} }
mutations : { deleteTag (state, { article, tag }) {
let tagIndex = article.tags.indexOf(tag);
article.tags.splice(tagIndex,1);
} }
ArticleController.php
/**
* Remove Tag from Article
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function deleteTag(Request $request)
{
$tag = \App\Tag::firstOrCreate(array('name' => $request->tagName));
$article = Article::findOrFail($request->articleId);
$result = $article->tags()->detach([$tag->id]);
$this->cleanUpTags();
return response('true', 200);
}
ルート/ web.php
Route::post('api/articles/delete-tag', '[email protected]');
これは、これまでに動作します。コードは正確に何をすべきかを実行します。それだけ本当に不器用な感じ。おそらく複雑になるでしょう。例はシンプルだがセットアップ全体が大きいためかもしれない。それにもかかわらず私は自分のコーディングを改善しようとしています。 :)
だから私の質問は以下のとおりです。
1)は、店の代わりの情報でarticleIDにVueの中で記事のオブジェクトを渡す方が良いでしょうか?
2)Store.slice()を店舗で使用するという考えは複雑すぎるのでしょうか?これはコンポーネント内で直接行うことができます。
3)PHPでタグを削除した後、Laravelからストア全体をリロードするのは意味がありますか?
編集:誰かがこの質問を探していて、どのように私はそれを最後に解決しましたか。このアプリのソースコードはhttps://github.com/shopfreelancer/streamyourconsciousness-laravel
これらのアイデアをありがとう!この場合、タグをサーバから取得するというアイデアは、すでにうまくいきます。 – shopfreelancer