我对我的数据库架构有点困惑。我有主要实体的表格,如" motors,motor_attributes"并且属性保存在"属性,attribute_options"中。该属性可以是输入字段,选择,复选框等。
现在马达的所有属性我将它保存在motor_attributes中。表的db结构是
Table: id, motor_id, attribute_id, attribute_value ...
现在一切正常。问题出现在列表页面上,我将只显示单个电机的两个属性。
第二个问题是属性值。对于select,它保存了attribute_options表的id,对于textfield或date类型,它保存了 字符串数据。
我如何获取属性值。
电机模型内部的关系就像
/**********************************/
public function adAttributes() {
//dd('dd');
return $this->hasMany(MotorAttribute::class,'motor_id','id')
->orderBy('motor_id', 'asc');
}
我获取20个电机+2属性的查询就像
$motors = Motor::with([
'advertisementPhotos',
'customer.dealer',
'adAttributes' => function ($query) {
// $query->with('attribute');
// $query->with('attributeValue');
$query->limit(2);
//;
// $query->take(2);
}
])->where('featured', 1)->where('status', 1)
->where('date_expiry', '>=', date('Y-m-d') . ' 00:00:00')
->limit(20)->orderBy('position', 'asc');
问题是我无法限制adAttribute也无法得到确切的值。因为属性值可能是(输入字段,我不能建立关系)或者可能是选择字段(我可以与attribute_option建立关系)。也可能是日期字段(不能建立关系)。
db需要修改吗?
答案 0 :(得分:0)
在预先加载时无法使用LIMIT
,您必须删除->limit(2)
。
执行查询后必须限制属性数量:
foreach($motors as $motor) {
$motor->adAttributes->take(2);
}
更新:我现在已经为极限加载创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit