web-dev-qa-db-fra.com

Laravel enregistrer une relation un à plusieurs

J'ai les relations suivantes établies à Laravel:

OrderStatus Model
  - hasMany('Order')

 Order Model
  - 'belongsTo('OrderStatus');

La base de données est configurée avec une table orders et une table order_statuses table. La table orders possède un champ pour order_status_id.

Lorsque j'enregistre une commande, je règle manuellement le order_status_id en récupérant le modèle de statut de commande approprié, comme ceci:

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

Je me demande s'il existe une fonction intégrée pour ce faire plutôt que de définir le order_status_id manuellement. J'ai lu des articles sur "Attacher un modèle associé" et "Associer des modèles" dans les documents Laravel, mais je ne peux pas déterminer s'ils correspondent à mon cas d'utilisation. Je pense que le problème que je 'est que je travaille directement avec le modèle enfant (l'ordre) et que j'essaie de définir son parent. Y a-t-il une fonction pour cela?

11
flyingL123

Bien sûr, vous pouvez le faire:

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

(status() est la relation appartient à. Vous devrez peut-être ajuster ce nom)

21
lukasgeiter

La façon correcte d'enregistrer une relation pour un nouveau modèle associé est la suivante:

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

Lien de documentation: http://laravel.com/docs/4.2/eloquent#inserting-related-models

11
Mysteryos