web-dev-qa-db-ja.com

Laravel 1対多の関係を保存する

Laravelで次の関係を設定しています。

OrderStatus Model
  - hasMany('Order')

 Order Model
  - 'belongsTo('OrderStatus');

データベースはordersテーブルとorder_statusesテーブルで設定されています。 ordersテーブルには、order_status_idのフィールドがあります。

注文を保存するときに、次のように適切な注文ステータスモデルを取得して、order_status_idを手動で設定します。

$status = OrderStatus::where(['name'=>'sample_status'])->firstOrFail();
$order->order_status_id = $status->id;
$order->save();

order_status_idを手動で設定するのではなく、これを行う組み込み関数があるかどうか疑問に思っています。 Laravel docs)の「関連モデルのアタッチ」と「モデルの関連付け」について読みましたが、これらが自分のユースケースに適合するかどうかわかりません。問題は持っているのは、子モデル(注文)を直接操作して、それを親に設定しようとしていることです。このための関数はありますか?

11
flyingL123

確かにこれを行うことができます:

_$status = OrderStatus::where(['name'=>'sample_status'])->firstOrFail();
$order = new Order;
$order->status()->associate($status);
$order->save();
_

status()はbelongsToリレーションです。その名前を調整する必要があるかもしれません)

21
lukasgeiter

新しい関連モデルの関係を保存する正しい方法は次のとおりです。

$status = OrderStatus::where(['name'=>'sample_status'])->firstOrFail();
$order = new Order;
$status->order()->save($order);

ドキュメンテーションリンク: http://laravel.com/docs/4.2/eloquent#inserting-related-models

11
Mysteryos