Laravel Eloquent hasMany e BelongsToMany não retornando usando com
Pergunta
Estou tentando fazer uma única consulta para retornar um order
e a card
para carregar, mas recebendo um erro.
Modelo de cartão:
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');
}
}
O que estou tentando recuperar:
$order = Order::with('card')->find($id);
Obviamente isso não funciona e tentei vários combos.Acho que o problema está nos meus modelos/relacionamentos.
Alguma ideia de como posso recuperar o pedido com os detalhes do cartão/token?
Informações do banco de dados:Cada pedido pode ter apenas um card_id
e cada cartão pode estar em vários pedidos.Não há order_id
no cartão.
Tabela de pedidos basicamente:
id | card_id
Mesa de cartas:
id | token
Tentando obter o token
col para retornar com o Order
.
Solução
Na tua Order
modelo, você precisa alterar isso:
public function card()
{
return $this->hasOne('Card');
}
para isso:
public function card()
{
return $this->belongsTo('Card');
}
A razão é que você está definindo o inverso do hasMany
relação.Com o belongsTo
relacionamento, Eloquent procurará um card_id
coluna no orders
mesa.