Получение данных через модель - вопрос от новичка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Получение данных через модель - вопрос от новичка

Сообщение porcelanosa »

В виджете

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

$brands_array=Brands::model()->findAll();
$this->render('BrandsListView',array('brands_array'=>$brands_array)); 
в представление виджета BrandsListView.php

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

 print_r($brands_array); 
просто чтобы проверить, что возвращает.
Выводит огромный массив со вложенностями.
А мне нужны банальные данные из таблицы.
Что я делаю не так? Может вообще совсем по другому это надо реализовывать?
В примерах блога - используетя dataProvider но он с zii.CListView -
А как просто без затей вывести данные?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Получение данных через модель - вопрос от новичка

Сообщение timlar »

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

$brands_array = CHtml::listData(Brands::model()->findAll(), 'id', 'brand');
$this->render('BrandsListView',array('brands_array'=>$brands_array));
 
Twitter: @timlar_ua
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Получение данных через модель - вопрос от новичка

Сообщение timlar »

А вообще опишите что нужно сделать и выложите структуру таблицы. Сложно о чем-то говорить, не видя предмета обсуждения. ;)
Twitter: @timlar_ua
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Получение данных через модель - вопрос от новичка

Сообщение porcelanosa »

Структура таблицы не имеет значения.
К примеру,

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

CREATE TABLE `brands` (
  `id` smallint(6) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `display_name` varchar(250) NOT NULL,
  `description` text collate utf8_unicode_ci NOT NULL
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  CHARSET=utf8
Необходимо получить массив полей в виде:

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

Array(
    [0]=>Array([id]=>0, [name]=>'Brandname',[display_name]=>'Brand name',[description]=>'any description'),
    [1]=>Array([id]=>1, [name]=>'Brandname2',[display_name]=>'Brand name2',[description]=>'any description')
      )      
Предложенный Вами код возвращает нужные значения, но неужели для получения всех полей мне нужно вызывать его 3 раза?
Возможно, использование хелперов и упрощает жизнь, но к ним надо привыкнуть и изучить их. Хотелось бы на начальном этапе освоения фреймворка использовать только те его части, работу которых понимаешь.
Все-таки, что возвращает findAll()? Для чего он предназначен? Была шокирована, когда увидела выданный им массив. Или где-то моя ошибка? Или он предназначен совсем для других целей.
Возможно надо использовать dataProvider? Но пока не понятно как.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Получение данных через модель - вопрос от новичка

Сообщение timlar »

Не могу понять, зачем Вам нужен такой столь странный многомерный массив? Что Вы собрались потом с ним делать?

findAll() возвращает абсолютно все записи из таблицы, равносилен запросу "SELECT * FROM table_name"

Для начала ознакомьтесь со следующим материалом, и Вам многое станет ясно:
Объекты доступа к данным (DAO)
Active Record
Реляционная Active Record
Twitter: @timlar_ua
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: Получение данных через модель - вопрос от новичка

Сообщение pirrat »

вы уверенны что вам нужен именно массив?
метод findAll - возвращает массив объектов СActiveRecord

в вашем случае

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

    $brands_array=Brands::model()->findAll();
    $this->render('BrandsListView',array('brands_array'=>$brands_array));  
в отображении BrandsListView

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

<?foreach($brands_array as $brand):?>
<? echo $brand->display_name; //выводим название бренда ?>
<?echo $brand->description; //выводим описание бренда?>
<?endforeach;?>
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Получение данных через модель - вопрос от новичка

Сообщение porcelanosa »

pirrat писал(а):вы уверенны что вам нужен именно массив?
метод findAll - возвращает массив объектов СActiveRecord
[/code]
Да спасибо. Очень непривычно ActiveRecord :-) Это то что нужно.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Получение данных через модель - вопрос от новичка

Сообщение porcelanosa »

Timlar писал(а):Не могу понять, зачем Вам нужен такой столь странный многомерный массив? Что Вы собрались потом с ним делать?

findAll() возвращает абсолютно все записи из таблицы, равносилен запросу "SELECT * FROM table_name"
да в том то и дело что ожидала массив - теперь то понятно, что это AR - будем врубаться
Для начала ознакомьтесь со следующим материалом, и Вам многое станет ясно:
Объекты доступа к данным (DAO)
Active Record
Реляционная Active Record
Обязательно - повторное прочтение думаю поможет.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Получение данных через модель - вопрос от новичка

Сообщение timlar »

Вы в следующий раз еще и описывайте, чего хотите добиться в конечном результате, тогда больше шансы, что Вам помогут выбрать более правильное решение. :)
Twitter: @timlar_ua
Ответить