14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】中間テーブルに値を追加・更新する方法

Posted at

#実現したいこと#
中間テーブルに値を追加・更新する。

タグ機能を作る際に、プロジェクトテーブルとタグーテーブル紐付ける際に
中間テーブルを作り、値を追加・更新することができたので、紹介します。

##テーブル設計##

####タグテーブル

id name
1 Javascript
2 PHP

####プロジェクトテーブル

id title
1 フロントエンドを学習しよう
2 バックエンドを学習しよう

####中間テーブル(プロジェクトタグテーブル)

id tag_id project_id
1 1 1
2 1 2
3 2 2

中間テーブルはこのように、テーブ同士が多対多の関係の時に必要になります。

##中間テーブルに値を追加する方法

###中間テーブルに値を入れるためのステップ

  1. テーブルのリレーションの設定
  2. 中間テーブルにアクセスし、値の追加

##1. テーブルのリレーションの設定

タグのモデルでプロジェクトと紐付けます。belongsToManyは多対多のリレーション
時に使います。これで中間テーブルにアクセスするための準備は完了です。


   public function project()
    {
        return $this->belongsToMany(Project::class);
    }

##2. 中間テーブルにアクセスし、値の追加
実際に値を追加します。値を追加する場合はattach()を使います。
まず、どのプロジェクトにタグを紐ずけるか、設定します。
今回は、projectのid:1にタグid:1を設定し、attachメソッドで追加します。


$project = Project::find(1);
//idが1番のプロジェクトを取得します。
$project->tags()->attach(1);
//プロジェクトid:1にタグid:1を追加します。

中間テーブルを確認すると下記のようになります。

id tag_id project_id
1 1 1

このように、中間テーブルに値を追加できます。

##中間テーブルの値を更新する場合

更新したい場合は、syncメソッドを使います。
syncメソッドの仕組みは値の削除、追加を行います。
今回の例なら、project_id:1にtag_id:1が登録されています。
syncを実行することで、tag_id:1を削除します。そして、$project->tags()->sync(2);
としているので、project_id:1のtag_id:に2を追加します。
なので、attachを使わなくても、追加、更新はsyncでできてしまうのです。


$project = Project::find(1);
//idが1番のプロジェクトを取得します。
$project->tags()->sync(2);
//中間テーブルのproject_id:1のtag_idを更新

中間テーブルを確認すると下記のようになります。

id tag_id project_id
1 2 1

##まとめ
中間テーブルへの値の追加はattach()メソッド、値の更新はsync()メソッド。
attach()を使わなくても、syncメソッドは追加、更新ができる。

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?