特定模型的相关 laravel 属性值
related laravel attribute value for a specific model
我对我的数据库模式有点困惑。我有 table 用于主要实体,例如 "motors, motor_attributes",属性保存在 "attribute, attribute_options" 中。该属性可以是输入字段、select、复选框等。
现在我将电机的所有属性保存在 motor_attributes 中。 table 的数据库结构是
Table: id, motor_id, attribute_id, attribute_value ...
现在一切正常。问题出现在列表页面上,我将只显示单个电机的两个属性。
第二个问题是属性值。对于 select 它包含 attribute_options table 的 ID,对于文本字段或日期类型它包含
字符串数据。
如何获取属性值。
motor Model里面的关系是这样的
/**********************************/
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 施加限制,也无法获得准确的值。因为属性值可能是(输入字段,我无法建立关系)也可能是select字段(我可以与attribute_option建立关系)。也可能是日期字段(不能建立关系)。
数据库是否需要修改?
预先加载时无法使用LIMIT
,您必须删除->limit(2)
。
您必须在执行查询后限制属性的数量:
foreach($motors as $motor) {
$motor->adAttributes->take(2);
}
更新: 我现在创建了一个带有限制的预加载包:https://github.com/staudenmeir/eloquent-eager-limit
我对我的数据库模式有点困惑。我有 table 用于主要实体,例如 "motors, motor_attributes",属性保存在 "attribute, attribute_options" 中。该属性可以是输入字段、select、复选框等。
现在我将电机的所有属性保存在 motor_attributes 中。 table 的数据库结构是
Table: id, motor_id, attribute_id, attribute_value ...
现在一切正常。问题出现在列表页面上,我将只显示单个电机的两个属性。
第二个问题是属性值。对于 select 它包含 attribute_options table 的 ID,对于文本字段或日期类型它包含 字符串数据。
如何获取属性值。
motor Model里面的关系是这样的
/**********************************/
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 施加限制,也无法获得准确的值。因为属性值可能是(输入字段,我无法建立关系)也可能是select字段(我可以与attribute_option建立关系)。也可能是日期字段(不能建立关系)。
数据库是否需要修改?
预先加载时无法使用LIMIT
,您必须删除->limit(2)
。
您必须在执行查询后限制属性的数量:
foreach($motors as $motor) {
$motor->adAttributes->take(2);
}
更新: 我现在创建了一个带有限制的预加载包:https://github.com/staudenmeir/eloquent-eager-limit