@v1kee

Почему ActiveRecord не выводит данные из связанной таблицы если имя поля = имени таблицы?

Добрый день!
Имеется 2 таблицы:
город и медцентр: Town и Medical соответственно.
структура:
Medical
id integer primary auto increment
title string
town integer
description string
...
Town
id integer primary auto increment
title string
parent integer (города по областям поэтому нужен парент)

Такой код:
// Модель мед центра
class Medical extends \yii\db\ActiveRecord
{
  ...
    // связь - у одного медцентра может стоять только 1 город в поле town
    public function getTown()
    {
        return $this->hasOne(Town::className(), ['id' => 'town']);
    }
  ...
}

// модель городов
class Town extends \yii\db\ActiveRecord
{
  ...
    // связь - в одном городе может быть несколько медцентров
    public function getMedical()
    {
        return $this->hasMany(Company::className(),['id' => 'town']);
    }
  ...

// подключаем в MedicalSearch модели релейшн
class MedicalSearch extends Medical
{
   ...
    public function search($params)
    {
        // Поиск с городами
        $query = Company::find()->with('town');
    }
   ...

// в отображении views/medical/index
...
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'town.title',    // <- вот таким образом показывает в таблице (not-set) (хотя по сути все должно работать)
        'city.title',       // <- а если геттер getTown в модели Medical переименовать в getCity и тут вызывать через 'city.title' то все работает на ура.
        'title',
        'description',
    ],
...

Целый день бился с этой проблемой не мог понять почему делая все по документации никак не хочет работать связь..
То ли я что то делаю не так, то ли - это глюк и в связанных таблицах нельзя называть поле именем связываемой таблицы?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы