Слишком большая таблица города

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Слишком большая таблица города

Сообщение asisdes »

Столкнулся с такой проблемой, ругается что памяти мало для работы с таблицей городов.
Предистория.
Есть у меня модель User - который живет в стране Country и городе City.
User
id | username | password | country | city

City
id | country | name

public function getCityColumn {
hasMany(...)
}
в GridView пользователя поля city, я вывожу через связь cityColumn.name
и тут ругается мало памяти.

в принципе можно через функция вывести отдельно
City::find()->where('country_id' =>country, 'id' =>country)->one;

Вопрос: это проблема ActiveRecord - что большие табличные данные не может перерабатывать и такие связи лучше использовать где заведомо не планируется использовать большие таблице или я что то не так накодил?!
Изображение
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Слишком большая таблица города

Сообщение vitalik1183 »

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

->where('country_id' =>country, 'id' =>country) 
это как?
Yii2!
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Слишком большая таблица города

Сообщение asisdes »

не, вы не поняли ... я имел ввиду
почему встроенный hasMany загнулся и ругается что памяти мало.
А то я как вариант, предложил завести отдельно метод и таскать
например.

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

public function getUserCity() {
          City::find()->where('country_id' =>$this->country, 'id' =>$this->city)->one;
}
а уже в GridView выводить

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

[
            'label' => 'Город',
            'format' => 'raw',
            'value' => function($data){
                return $this->userCity->name;
            },
        ],
Изображение
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: Слишком большая таблица города

Сообщение kwasti »

в вашем последнем коде непонятно зачем 'country_id' =>$this->country
у вас уже есть поиск по ключу.'id' =>$this->city
мне кажется вам нужно более подробный код показать из public function getCityColumn {}
чуствую там у вас кросс запрос идет поэтому и паямти не хватает
еще не понимаю зачем в юзерах hasMany() для поиска города?
у вас какая связь между таблицами юзер-город?
предполагаю что пользователь у вас в одном городе может быть, в таком случае hasMany нужно в городе прописывать а не в юзере
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Слишком большая таблица города

Сообщение asisdes »

hasMany - мой косяк, там hasOne...

зачем вставил проверку по Country... вот думаю поможет ли в скорости выборки... так по 2 условиям может быстрее будет.
позже коды покажу, как до дома доберусь.
Изображение
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Слишком большая таблица города

Сообщение asisdes »

блин я был не прав, ошибка закралось в другом месте оказывается
у меня была подключена форма поиска и туда я в свою очередь дроп-лист со списком городов поставил вот он и не мог нормально отобразить, а я по глупости на АР думал...
Изображение
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Слишком большая таблица города

Сообщение SiZE »

AR может давать просадку по памяти. Например, когда забываешь отключить жадную загрузку.
Ответить