特定模型的相关laravel属性值

时间:2018-04-02 08:24:41

标签: mysql database laravel laravel-eloquent

我对我的数据库架构有点困惑。我有主要实体的表格,如" 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需要修改吗?

1 个答案:

答案 0 :(得分:0)

在预先加载时无法使用LIMIT,您必须删除->limit(2)

执行查询后必须限制属性数量:

foreach($motors as $motor) {
    $motor->adAttributes->take(2);
}

更新:我现在已经为极限加载创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit