akse1erator

[Решено] Array to string conversion

Рекомендуемые сообщения

akse1erator    0

Доброго времени суток.

Столкнулся с такой проблемой: вылезает ошибка  Array to string conversion при записи ячейки из бд в массив .

Модель:

public function getFiltersId(){
$filters = array();
$filter_group2 = $this->db->query("SELECT filter_id FROM " . DB_PREFIX . "filter_description WHERE  filter_group_id = 2");
  foreach ( $filter_group2->rows as $value){
$filters['filter_group_2'][] = $value;
}
return $filters;
}
public function getFilterName ($filter_id){
$name = array();
$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "filter_description WHERE  filter_id = '".$filter_id."'");
  foreach ( $query ->rows as $value){
$name['name'] = $value;
}
return $name;
}

 

Контроллер:


$filters_id = $this->model_catalog_option->getFiltersId();
 
foreach($filters_id['filter_group_2'] as $value){
$name = $this->model_catalog_option->getFilterName($value);
$data['filter_group_2'][] =  $name['name'];
}

 

Сама ошибка указывает на строку

$query = $this->db->query("SELECT name FROM " . DB_PREFIX . "filter_description WHERE  filter_id = '".$filter_id."'");

 

из файла модели, но если удалить весь foreach из контроллера, то ошибка пропадает.

В функции getFilterName() пробовал использовать implode(), fetch_array, записывал в return запрос к бд, записывал в массив name[] результат запроса и передавал массив в контроллер.

При использовании implode() ругается, что в строчке обращения к бд я преобразую массив в строку, а в строчке с implode, что в качестве аргумента должен быть массив.... парадокс однако :-D

 

Изменено пользователем akse1erator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 095

а нафига тебе столько запросов, если ты тянешь данные из одной и той же таблицы?

public function getFiltersByGroupId($filter_group_id){
$filters = array();
$query = $this->db->query("SELECT filter_id, name FROM ".DB_PREFIX."filter_description WHERE filter_group_id = '".(int)$filter_group_id."'");

/* на случай, если хочешь что-то с данными сделать до возвращения или добавить какие-то */
foreach ($query->rows as $filter_data){
$filters[$filter_group_id][] = $filter_data;
}
/* иначе можно делать просто @return $query->rows;@ */

return $filters;
}
$data['filter_group_2'][] = $this->model_catalog_option->getFiltersByGroupId(2);
и нафига ты запросы к таблицам фильтров засунул в модель опций?..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SlideShow    21

а нафига тебе столько запросов, если ты тянешь данные из одной и той же таблицы?

public function getFiltersByGroupId($filter_group_id){
$filters = array();
$query = $this->db->query("SELECT filter_id, name FROM ".DB_PREFIX."filter_description WHERE filter_group_id = '".(int)$filter_group_id."'");

/* на случай, если хочешь что-то с данными сделать до возвращения или добавить какие-то */
foreach ($query->rows as $filter_data){
$filters[$filter_group_id][] = $filter_data;
}
/* иначе можно делать просто @return $query->rows;@ */

return $filters;
}
$data['filter_group_2'][] = $this->model_catalog_option->getFiltersByGroupId(2);
и нафига ты запросы к таблицам фильтров засунул в модель опций?..

 

 

 

 

а нафига тебе столько запросов, если ты тянешь данные из одной и той же таблицы?

 

вариантов может быть масса, почему нет?

 

 

 

и нафига ты запросы к таблицам фильтров засунул в модель опций?.. 

 

это откуда такая инфа?

 

 

 

/* иначе можно делать просто @return $query->rows;@ */

 

ого, хорош...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
akse1erator    0

а нафига тебе столько запросов, если ты тянешь данные из одной и той же таблицы?

Я пока новичок в php и sql, со временем научусь делать запросы рационально (за пример кстати спасибо). 

и нафига ты запросы к таблицам фильтров засунул в модель опций?..

Чтобы не подключать лишних моделей.

print_r($filter_id); ?

Спасибо, увидел ошибку.

В качестве аргумента передавался массив.  

Тему можно закрыть.

Изменено пользователем akse1erator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SlideShow    21

вариантов может быть масса, почему нет?

 

 

это откуда такая инфа?

 

 

ого, хорош...

 

$filters_id = $this->model_catalog_option->getFiltersId();

 

понял.

 

 

Чтобы не подключать лишних моделей.

 

Печаль, т.е. это плохая тенденция, у движка есть code convention, архитектура, соблюдай, учись. В общем не делай так, пусть больше кода, зато если что знаешь куда лезть, код более предсказуемым выходит. Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу