HasMany связь ошибка

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

HasMany связь ошибка

Сообщение german.igortcev »

Существует 3 таблицы

Segment - id, title
SegmentTemplate segments_id, template_id
Template - id, title

В модели template устанавливаю связь через составную таблицу SegmentTemplate

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

public function getSegments()
    {
        return $this->hasMany(Segments::className(), ['id' => 'segments_id'])
            ->viaTable(SegmentsTemplate::className(), ['template_id' => 'id']);
    } 
Получаю ошибку

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

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dev.common\models\SegmentsTemplate' doesn't exist
The SQL being executed was: SELECT * FROM `common\models\SegmentsTemplate` WHERE `template_id`=1

Error Info: Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'dev.common\models\SegmentsTemplate' doesn't exist
)
 

не могу разобраться несколько дней.

В модели в rules не забыл Templates

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

['segments', 'safe'] 

Делал по мануалу и отсюда появился еще один вопрос

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

public function setSegments($segments)
    {
        $this->segments = $segments;
    } 
Для чего его предназначение.
inververs
Сообщения: 87
Зарегистрирован: 2015.04.25, 11:31
Откуда: Минск, Беларусь

Re: HasMany связь ошибка

Сообщение inververs »

Вы, кажется, забыли в моделях метод:

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

    public static function tableName()
    {
        return 'имя таблицы';
    }
 
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: HasMany связь ошибка

Сообщение Neuromance »

В viaTable указывайте название таблицы , а не имя класса

setSegments - Обычный сеттер. В нем можете не только задать значение свойства, но и , например , привязать связь populateRelation к модели.
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: HasMany связь ошибка

Сообщение german.igortcev »

inververs писал(а):Вы, кажется, забыли в моделях метод:

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

    public static function tableName()
    {
        return 'имя таблицы';
    }

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

   public static function tableName()
    {
        return 'templates';
    }
 
Есть естественно, просто не показывал
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: HasMany связь ошибка

Сообщение german.igortcev »

Neuromance писал(а):В viaTable указывайте название таблицы , а не имя класса

setSegments - Обычный сеттер. В нем можете не только задать значение свойства, но и , например , привязать связь populateRelation к модели.

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

 public function getSegments()
    {
        return $this->hasMany(Segments::className(), ['id' => 'segments_id'])
            ->viaTable('segments_templates', ['template_id' => 'id']);
    }

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

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dev.segments_templates' doesn't exist
The SQL being executed was: SELECT * FROM `segments_templates` WHERE `template_id`=1

Error Info: Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'dev.segments_templates' doesn't exist

У меня задача реализовать dropDownList (мульти селект)..
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: HasMany связь ошибка

Сообщение german.igortcev »

Neuromance писал(а):В viaTable указывайте название таблицы , а не имя класса

setSegments - Обычный сеттер. В нем можете не только задать значение свойства, но и , например , привязать связь populateRelation к модели.

Вы были правы на счет указания : viaTable указывайте название таблицы , а не имя класса
Ответить