質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

3321閲覧

Laravel5 リレーションについて

kubotan

総合スコア39

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2015/05/12 07:59

Laravel初心者です。

モデルのリレーションについて質問です。

・User
・Team
・TeamUser
の三つのモデルがあって、

テーブルは
・users

lang

1CREATE TABLE "users" ( 2 "id" integer not null primary key autoincrement, 3 "name" varchar not null, 4 "created_at" datetime not null, 5 "updated_at" datetime not null 6);

・teams

lang

1CREATE TABLE "teams" ( 2 "id" integer not null primary key autoincrement, 3 "name" varchar not null, 4 "created_at" datetime not null, 5 "updated_at" datetime not null 6);

・team_users

lang

1CREATE TABLE "teams" ( 2 "id" integer not null primary key autoincrement, 3 "userId" integer not null, 4 "teamId" integer not null, 5);

このような感じになっていて
TeamUserモデルで
UserとTeamを繋ぎたいで、userを削除すればteam_usersのカラムも一緒に削除したりしたいのですが、どのようにリレーションすればいいでしょうか?

もしくは、もっと綺麗なやり方があれば教えてください。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

9walk

2015/05/16 17:22

質問の内容は、userを削除した時に、team_usersのrowも削除するようにしたいということでよろしいでしょうか?それとも、多対多のモデルの書き方でしょうか?とりあえず、前者の方だけ回答してしまいました。
guest

回答1

0

ベストアンサー

マイグレーションファイルを作成すると以下の様な感じになります。
ON DELETE CASCADE 句を付けることで、userもしくはteamが削除された時に、team_userも削除されます。

lang

1<?php // database/migrations/YYYY_MM_DD_XXXXXX_create_team_user_table.php 2 3use Illuminate\Database\Schema\Blueprint; 4use Illuminate\Database\Migrations\Migration; 5 6class CreateTeamUserTable extends Migration { 7 8 public function up() 9 { 10 Schema::create('team_user', function(Blueprint $table) 11 { 12 $table->integer('team_id')->unsigned()->index(); 13 $table->foreign('team_id')->references('id')->on('teams')->onDelete('cascade'); 14 15 $table->integer('user_id')->unsigned()->index(); 16 $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 17 18 $table->timestamps(); 19 }); 20 } 21 22 public function down() 23 { 24 Schema::drop('team_user'); 25 } 26 27}

SQLになるとこんな感じ。

lang

1CREATE TABLE `team_user` ( 2 `team_id` integer NOT NULL, 3 `user_id` integer NOT NULL, 4 `created_at` datetime NOT NULL, 5 `updated_at` datetime NOT NULL, 6 FOREIGN KEY(`team_id`) REFERENCES "teams" ( "id" ) on delete cascade, 7 FOREIGN KEY(`user_id`) REFERENCES "users" ( "id" ) on delete cascade 8); 9

投稿2015/05/16 04:34

編集2015/05/16 04:37
9walk

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kubotan

2015/05/17 10:04

回答ありがとうございます。 はい、userを削除した時に、team_usersのrowも削除したいです。 考え方としては、1つのTeamは複数のUserを持っていて、1つのUserは複数のTeamに属しているのをTeamUserで管理したい感じです。 現在これをBelongsToManyでなんとか実現できたような感じなんですが、 もっといいやり方やBelongsToManyでこうやればいいとかありますか?
9walk

2015/05/17 10:12

あとはUserとTeamモデルで、BelongsToMany使えば大丈夫だと思います。Railsだと、モデルの方で、:dependent を設定したりしますが、LaravelはSQLだけでやるみたいです。
kubotan

2015/05/17 11:20

ありがとうございます。 とても参考になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問