есть таблица 'd_records' допустим теннисная ракетка 1
record_id,model_id
которая имеет model теннисная ракетка
model имеет свойcтва d_properties ( их может быть много у model_id) ( допустим размер ракетки, размер головы ракетки и т.д.)
properties имеет values (d_property_values) их тоже может быть много, которые которые хранят option_id и option_value_id описания которых хранятся в таблицах d_options и d_options_value что-то типа интернет-магазина.
т.е. по сути идея такова есть запись (record) в базе которая относится к ракеткам (model), ракетка имеет параметры (properties) размеры ракетки (1,3,4) и размер головы например 120
вопрос как мне правильно строить JOINWITH чтобы делать оптимальные запросы и вытаскивать эти все что есть в таблицах
Код: Выделить всё
class Records
public function getModel()
{
return $this->hasOne(Models::className(), ['model_id' => 'model_id']);
}
Код: Выделить всё
class Model
public function getProperties()
{
return $this->hasMany(Properties::className(), ['model_id' => 'model_id']);
}
Код: Выделить всё
class Properties
чтобы вытащить values приходится прописывать $record_id как это сделать при joinWith затрудняюсь
public function getValues($record_id)
{
return $this->hasMany(OptionsValue::className(), ['id' => 'option_value_id'])
->viaTable(PropertyOptions::tableName(), ['property_id' => 'id'],
function ($query) use ($record_id) {
/* @var $query \yii\db\ActiveQuery */
$query->andWhere(['record_id' => $record_id]);
});
}