[英]Laravel relationships - hasMany, hasOne
我有两个模型,一个订单模型和一个地址模型。 订单表中的每一行都有一个地址ID,该地址ID与地址表中的一行相关。
在订单模型中...
public function address()
{
return $this->hasOne(OrderAddress::class);
}
在地址模型中...
public function order()
{
return $this->hasMany(Order::class);
}
但是,我想从订单模型访问地址
$order->address
这显示错误,因为我在地址表中没有任何order_id字段。 最终,我希望可以检查表中的地址是否已经存在(例如,来自同一客户的重复订单),然后可以在多个订单中重复使用同一行。
因此,总而言之,一个订单只能有一个地址,但是一个地址可以有多个订单。 我已经这样设置了我的模型(我认为),但是抛出了以下错误:
Column not found: 1054 Unknown column 'order_addresses.order_id' in 'where clause'
出现该错误的原因是,您在表中没有设置外键。如果您使用的是与默认命名约定不同的外键,则必须指定外键的名称。 如果您不使用预期的“ id”,甚至可以指定主键。
public function order()
{
return $this->hasMany('App\Order', 'foreign_key', 'local_key');
}
public function address()
{
return $this->hasOne('App\OrderAddress', 'foreign_key');
}
Laravel假定您在以下情况下使用数据库命名最佳实践:
如果您不遵循该标准,那么Eloquent足够灵活,可以为您提供一个参数来更改它。
这似乎是一个相当普遍的混淆,但是hasMany
的反函数是belongsTo
。
您需要的是:
public function address()
{
return $this->belongsTo(OrderAddress::class);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.