person

前言

正在开发的系统中,需要将设备信息(EquipmentInfo)和设备所拥有的属性信息(EquipmentAttribute)返回,设备属性信息是通过 equipment_attribute 表中的 equ_id 字段关联的。因此,想用关联查询实现。

关联定义

class EquipmentInfo extends Model
{
    // 定义一对多关联,一个设备拥有多个属性
    public function equipmentAttribute()
    {
        return $this->hasMany('equipment_attribute', 'equ_id')->field('attribute_name, attribute_value');
    }
}


在官方文档中,只说明了 V5.0.3+ 版本开始,可以使用 field() 方法支持为关联模型定义需要查询的字段,但是并没有说明在使用关联预加载的时候必须带上关联外键的主键,因此会报错:
image.png
所以必须加上关联模型的主键:

// 定义一对多关联
public function equipmentAttribute()
{
    return $this->hasMany('equipment_attribute', 'equ_id')->field('attribute_name, attribute_value, equ_id');
}

成功返回数据:
image.png
当然,不要 field() 直接将关联的信息全部查询出来:

public function equipmentAttribute()
{
    return $this->hasMany('equipment_attribute', 'equ_id');
}

这样就不会出这种问题啦。

新评论