подключение сложной связи

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
an.viktory@gmail.com
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

подключение сложной связи

Сообщение an.viktory@gmail.com »

http://prntscr.com/ksln5o
есть таблица '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]);
                });
    }
Ответить