Laravel Eloquent hasMany et BelongsToMany ne reviennent pas avec
Question
J'essaie de faire une seule requête pour récupérer un order
et le card
charger, mais obtenir une erreur.
Modèle de carte :
class Card extends Eloquent {
protected $guarded = array();
public static $rules = array();
public function user()
{
return $this->belongsTo('User');
}
public function orders()
{
return $this->hasMany('Order');
}
}
Modèle de commande :
class Order extends Eloquent {
protected $guarded = array();
public static $rules = array();
public function user()
{
return $this->belongsTo('User');
}
public function card()
{
return $this->hasOne('Card');
}
public function address()
{
return $this->belongsTo('Address');
}
public function orderItems()
{
return $this->hasMany('OrderItem');
}
}
Ce que j'essaie de récupérer :
$order = Order::with('card')->find($id);
Cela ne fonctionne évidemment pas et j'ai essayé plusieurs combos.Je pense que le problème vient de mes modèles/relations.
Avez-vous une idée de la façon dont je peux récupérer la commande avec les détails de la carte/du jeton ?
Informations sur la base de données :Chaque commande ne peut avoir qu'un seul card_id
et chaque carte peut être dans plusieurs commandes.Il n'y a pas order_id
dans la carte.
Tableau des commandes en gros :
id | card_id
Tableau des cartes :
id | token
Essayer d'obtenir le token
col pour revenir avec le Order
.
La solution
Dans ton Order
modèle, vous devez changer ceci :
public function card()
{
return $this->hasOne('Card');
}
pour ça:
public function card()
{
return $this->belongsTo('Card');
}
La raison est que vous définissez l'inverse du hasMany
relation.Avec le belongsTo
relation, Eloquent recherchera un card_id
colonne sur le orders
tableau.