Столкнулся с такой проблемой, ругается что памяти мало для работы с таблицей городов.
Предистория.
Есть у меня модель 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: Слишком большая таблица города
Код: Выделить всё
->where('country_id' =>country, 'id' =>country)
Yii2!
Re: Слишком большая таблица города
не, вы не поняли ... я имел ввиду
почему встроенный hasMany загнулся и ругается что памяти мало.
А то я как вариант, предложил завести отдельно метод и таскать
например.
а уже в GridView выводить
почему встроенный hasMany загнулся и ругается что памяти мало.
А то я как вариант, предложил завести отдельно метод и таскать
например.
Код: Выделить всё
public function getUserCity() {
City::find()->where('country_id' =>$this->country, 'id' =>$this->city)->one;
}
Код: Выделить всё
[
'label' => 'Город',
'format' => 'raw',
'value' => function($data){
return $this->userCity->name;
},
],
Re: Слишком большая таблица города
в вашем последнем коде непонятно зачем 'country_id' =>$this->country
у вас уже есть поиск по ключу.'id' =>$this->city
мне кажется вам нужно более подробный код показать из public function getCityColumn {}
чуствую там у вас кросс запрос идет поэтому и паямти не хватает
еще не понимаю зачем в юзерах hasMany() для поиска города?
у вас какая связь между таблицами юзер-город?
предполагаю что пользователь у вас в одном городе может быть, в таком случае hasMany нужно в городе прописывать а не в юзере
у вас уже есть поиск по ключу.'id' =>$this->city
мне кажется вам нужно более подробный код показать из public function getCityColumn {}
чуствую там у вас кросс запрос идет поэтому и паямти не хватает
еще не понимаю зачем в юзерах hasMany() для поиска города?
у вас какая связь между таблицами юзер-город?
предполагаю что пользователь у вас в одном городе может быть, в таком случае hasMany нужно в городе прописывать а не в юзере
Re: Слишком большая таблица города
hasMany - мой косяк, там hasOne...
зачем вставил проверку по Country... вот думаю поможет ли в скорости выборки... так по 2 условиям может быстрее будет.
позже коды покажу, как до дома доберусь.
зачем вставил проверку по Country... вот думаю поможет ли в скорости выборки... так по 2 условиям может быстрее будет.
позже коды покажу, как до дома доберусь.
Re: Слишком большая таблица города
блин я был не прав, ошибка закралось в другом месте оказывается
у меня была подключена форма поиска и туда я в свою очередь дроп-лист со списком городов поставил вот он и не мог нормально отобразить, а я по глупости на АР думал...
у меня была подключена форма поиска и туда я в свою очередь дроп-лист со списком городов поставил вот он и не мог нормально отобразить, а я по глупости на АР думал...
Re: Слишком большая таблица города
AR может давать просадку по памяти. Например, когда забываешь отключить жадную загрузку.