LoginSignup
1
0

More than 1 year has passed since last update.

LarevelのcreateメソッドによってDBへレコードを挿入する際の外部キーの自動取得

Last updated at Posted at 2022-08-21

createメソッド

  • MVCモデルのM(Model)クラスから呼び出すことができるメソッド。
  • 引数に連想配列を渡すことで、紐づけているDBのテーブルにデータを追加することができる.
  • 同様にデータを追加することができるsaveメソッドもあるが、こちらはインスタンスを引数とすることに注意。
  • リレーションを定義している場合、createメソッドとsaveメソッドともに外部キーには主テーブルの主キーを自動的に格納するようになっている。
create method
// 掲示板アプリを想定して、投稿者を格納するテーブルをPost,投稿コメントを格納するテーブルをCommentsとする。
// また、PostとCommentsには一対多のリレーションを定義しているとする。
// Commentsテーブルにはpost_idカラムがあり、外部キーとする。参照先はPostテーブルのidとする。

$post = Post::find(1); // Postテーブルの主キーが1のレコードのインスタンスが$postに格納される。
$post->comments()->create([ // PostとCommentsにリレーションが定義されているため、自動でpost_idを1としてレコードを作成する。
    comments = 'A new comment.';
]);
  • リレーションを定義して、親モデルから子モデルにアクセスする場合、Laravel公式ドキュメントによると外部キーは次のように想定されます。

Eloquentは、Commentモデルに対する外部キーを自動的に決めることを心に留めてください。規約によりEloquentは、自分自身のモデル名の「スネークケース」に_idのサフィックスをつけた名前と想定します。ですから今回の例でEloquentは、Commentモデルの外部キーをpost_idであると想定します。

  • また、子モデルから親モデルにアクセスする場合、次のようにして親モデルを探します。

前の例でEloquentはCommentモデルのpost_idと一致するidのPostモデルを見つけようとします。Eloquentはリレーションメソッドの名前として、_に続けて主キーのカラム名をサフィックスとして付けた名前をデフォルトの外部キーとします。

参考文献

1
0
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
1
0