Связать 5 таблиц (моделей). ActiveRecord

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
k1627
Сообщения: 1
Зарегистрирован: 2018.07.25, 11:24

Связать 5 таблиц (моделей). ActiveRecord

Сообщение k1627 »

Добрый день.
Я новичок в ООП. Подскажите, как связать 5 таблиц в yii2 посредством ActiveRecord?
Схема базы прикреплена ниже. База переделана в более упрощенную для наглядности.

yii2 не позволяет проставлять связи в каждой модели (или, может, я что-то не так делаю), поэтому использую viaTable.
Сейчас у меня реализованы отдельные связи к OrderProperty_String и OrderProperty_Type следующим образом:

Код: Выделить всё

class Client extends \yii\db\ActiveRecord
{
   public function getActOrder()                                                                                                   
    {    
    $ord = $this->hasOne(Order::className(), ['client_id' => 'id'])    //Связь с Order. Нужен один определенный, потому условие
                 ->andWhere(['orderType_id'=>[66014]]);  
            return $ord;  
    }  
}	


    public function getOrderPropsNames()      
    {
        $propName = $this->actOrder->names;
        return  $propName;
    } 
	
public function getOrderText()    
    {
       $propText = $this->actOrder->strings;
       return $propText;
    }
}

//////////////////////////////////////////////////////	


class Order extends \yii\db\ActiveRecord
{
    public function getStrings()                                                                                   
    {
       return $this->hasMany(OrderProperty_String::className(), ['id' => 'id']) 
          ->viaTable('OrderProperty', ['order_id' => 'id']); 
    }
	
	    public function getNames()                                                                               
    {
       return $this->hasMany(OrderProperty_Type::className(), ['id' => 'type_id']) 
          ->viaTable('OrderProperty', ['order_id' => 'id']); 
    }
}	
Поправьте, пожалуйста, если это можно сделать более корректно. Как связать и эти две таблицы между собой?
В результате мне нужно получить название строки name из OrderProperty_Type-> и наполнение value из OrderProperty_String.
Изображение
Ответить