特定模型的相关laravel属性值

问题描述 投票:0回答:1

关于我的数据库架构,我有点困惑。我有主要实体的表,如“motors,motor_attributes”,属性保存在“attribute,attribute_options”中。该属性可以是输入字段,选择,复选框等。

现在电机的所有属性我都将它保存在电机属性中。并且表的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建立关系)。也可能是日期字段(不能建立关系)。

数据库是否需要修改?

mysql database laravel laravel-eloquent
1个回答
0
投票

在急切加载时不可能使用LIMIT,你必须删除->limit(2)

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.