【Laravel5】ManyToManyモデルの更新はsyncをつかう

【Laravel5】ManyToManyモデルの更新はsyncをつかう

【Laravel5】ManyToManyモデルの更新はsyncをつかう

【Laravel5】ManyToManyモデルの更新はsyncをつかう

こちらのサイトのまとめです。

Syncing Tags – Laravel5 Fundamentals

GitHubにサンプルプロジェクトがあります。

ryo-ogata/learning-laravel-5

はじめに

前回、記事の登録に際して、タグを複数設定することができるようになりました。

記事モデルにタグモデルをManyToMany関係の紐付けもすでに実装ずみですが、今回は記事の編集・更新について見ていきたいと思います。

記事のタグを編集・更新できるようにする

  1. 記事を追加する。

    タグを2つ付けた記事を追加しましょう。

    http://localhost:8000/articles/create

    今回登録した際にid=6となりました。詳細画面で確認します。このような記事が表示されているはずです。

    http://localhost:8000/articles/6

    【Laravel5】ManyToManyモデルの更新はsyncをつかう
    【Laravel5】ManyToManyモデルの更新はsyncをつかう
  2. 更新メソッドを修正する
    • app/Http/Controllers/ArticleController.php

      ここでは画面から入力されたタグのみ記事に紐付けたいため、sync()メソッドを呼び出しています。

      記事登録storeで利用したattach()メソッドを使うと毎回タグを追加することになってしまい意図した動作をしません。指定したタグを削除する際には、detach()を使います。

  3. データベースを確認する

    事前にMySQLにログインしてレコードを閲覧しておきましょう。記事articlesとリレーションのarticle_tagが紐付いて、さらにtag_id1, 4を持っていることがわかります。

  4. 確認する

    編集画面からタグを減らしたり、増やしたりしてみます。

    http://localhost:8000/articles/6/edit

    【Laravel5】ManyToManyモデルの更新はsyncをつかう
    【Laravel5】ManyToManyモデルの更新はsyncをつかう

privateメソッドにする

<

p>タグを登録するcreateArticle(AuthRequest)メソッド、記事を作成するsyncTags(Article, array)メソッドを切り出してみましょう。

  • app/Http/Controllers/ArticleController.php

まとめ

記事に紐付いているタグを更新することができました。さらにsync()メソッドをつかうことにより登録・更新で同じメソッドをつかうことができました。

次回は、Select2 pluginの実装と、Laravel Elixirについて紹介したいと思います。

Comments are closed, but trackbacks and pingbacks are open.