其Laravel 5.3
陷入物体关系 我有一些数据库模型,如下面的
此处客户可以拥有多个设备,设备可以拥有多个活动
我想通过客户获取所有事件,以下代码是我的模型已定义关系..
当我尝试使用([' customer']) - > get();来尝试获取DeviceEvents ::之类的事件时它只返回异常..请帮我解决这个ORM ..
customer (Model: Customer)
========
id | name
function devices = $this->hasMany('App\Devices');
--------------------------------------------------------------------------------
devices (Model: Devices)
========
id | customer_id | name
function customer = $this->belongsTo('App\Customer');
function events = $this->hasMany('App\DeviceEvents');
--------------------------------------------------------------------------------
event_logs (Model: DeviceEvents)
==========
id | device_id
function device = $this->belongsTo('App\Devices');
答案 0 :(得分:3)
Eloquent从关系名称派生外键列的名称。您已将关系命名为设备,因此Eloquent假定外键列名为 devices_id 。如果要使用其他名称,则需要在创建关系时指定。
替换
$this->belongsTo('App\Devices');
与
$this->belongsTo('App\Devices', 'device_id');
您现在应该能够访问 $ customer->设备中的客户设备,并通过它们进行迭代,以获取每个设备的事件列表。
如果您只想获取给定客户的所有设备的事件列表,则需要在客户模型中定义新的多次通过关系:
public function events() {
return $this->hasManyThrough('App\DeviceEvents', 'App\Devices', 'customer_id', 'device_id', 'id');
}
现在,您可以使用以下方式获取客户及其活动:
$customer = Customer::with('events')->find('YOUR_CUSTOMER');
$ customer-> events 集合中提供了所有活动。
还有一些提示:
您可以更加轻松地加载嵌套关系:
//load customer with related devices and their events
Customer::with('devices.events')->find('YOUR_CUSTOMER');
我命令通过主键获取记录,您可以使用 find()方法:
$customer = Customer::find('YOUR_CUSTOMER');