Laravel eloquente hasmany e appartensaromania non tornando usando con
Domanda
Sto cercando di eseguire una singola query per recuperare un order
e il card
da caricare, ma ottenere un errore.
Modello di carta:
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');
}
}
.
Modello di ordine:
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');
}
}
.
Cosa sto cercando di tornare:
$order = Order::with('card')->find($id);
.
Questo ovviamente non funziona e ho provato diverse combinazioni.Penso che il problema sia con i miei modelli / relazioni.
Qualche idea come posso recuperare l'ordine con i dettagli della carta / del token?
DB INFO: ogni ordine può avere solo un card_id
e ogni carta può essere in molti ordini.Non esiste order_id
nella carta.
Ordini tabella fondamentalmente:
id | card_id
.
Tabella delle carte:
id | token
.
Cercando di ottenere il token
Col per tornare con il Order
.
Soluzione
Nel modello Order
, è necessario modificare questo:
public function card()
{
return $this->hasOne('Card');
}
.
A questo:
public function card()
{
return $this->belongsTo('Card');
}
.
Il motivo è che stai definendo l'inverso della relazione hasMany
.Con la relazione belongsTo
, eloquente cercherà una colonna card_id
sulla tabella orders
.