Laravel Eloquent hasMany y BelongsToMany no vuelven a usarse con
Pregunta
Estoy intentando hacer una sola consulta para recuperar un order
y el card
para cargar, pero aparece un error.
Modelo de tarjeta:
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');
}
}
Modelo de pedido:
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');
}
}
Lo que estoy tratando de recuperar:
$order = Order::with('card')->find($id);
Obviamente esto no funciona y he probado varias combinaciones.Creo que el problema está en mis modelos/relaciones.
¿Alguna idea de cómo puedo recuperar el pedido con los detalles de la tarjeta/token?
Información de la base de datos:Cada pedido puede tener solo uno card_id
y cada tarjeta puede estar en muchos pedidos.No hay order_id
en la tarjeta.
Tabla de pedidos básicamente:
id | card_id
Mesa de cartas:
id | token
Tratando de conseguir el token
col para regresar con el Order
.
Solución
En tus Order
modelo, necesitas cambiar esto:
public function card()
{
return $this->hasOne('Card');
}
a esto:
public function card()
{
return $this->belongsTo('Card');
}
La razón es que estás definiendo la inversa de la hasMany
relación.Con el belongsTo
relación, Eloquent buscará una card_id
columna en el orders
mesa.