特定模型的相关 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