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?
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)
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