Помогите с CActiveRecord

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Filsh
Сообщения: 77
Зарегистрирован: 2010.10.17, 11:00
Откуда: Днепропетровск
Контактная информация:

Помогите с CActiveRecord

Сообщение Filsh »

Здравствуйте, начал осваивать фреймворк и столкнулся с непонятными моментами,
вот есть у меня таблица

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

CREATE TABLE `artists` (
  `artist_id` smallint(5) unsigned NOT NULL auto_increment,
  `artist_name` varchar(255) NOT NULL,
  `biography` text,
  PRIMARY KEY  (`artist_id`),
  UNIQUE KEY  (`artist_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
и есть в модели такой метод

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

   public function addArtist($params)
    {
        $this->setAttributes($params);
           
        return $this->save();
    } 
в $params он получает массив типа такого

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

array(2) {
  ["artist_name"]=>
  string(8) "e45tyryh"
  ["biography"]=>
  string(10) "ghyfjghjhj"
} 
1) Почему то он создает новую запись, заполняет artist_name, а biography остается не заполненым, но если я сделаю так

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

public function addArtist($params)
    {
        $this->setAttributes($params);
        $this->artist_name = $params['artist_name'];
        $this->biography = $params['biography'];
        
        return $this->save();
    } 
то все ок, подскажите мне, может это нормально, или я что-то упустил?
2) Нужно ли в таком вот способе делать защиту от SQL иньекций, или там в классе уже все сделано?
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Помогите с CActiveRecord

Сообщение Caveman »

1 января отдыхать надо! ;)

А по вопросу - смотрите метод rules - правила обработки атрибутов. Скорее всего для текущего сценария "biography" не является безопасным или обрабатываемым каким-либо правилом
Filsh
Сообщения: 77
Зарегистрирован: 2010.10.17, 11:00
Откуда: Днепропетровск
Контактная информация:

Re: Помогите с CActiveRecord

Сообщение Filsh »

Спасибо, с этим моментом я разобрался, выходит что нужно валидацию делать всем полям таблици, даже если этого не нужно.
И появился у меня еще вопрос, у меня не получается сделать запрос с выборкой по order by и limit.
C order by с горем пополам у меня еще получалось) а вот limit именно с двумя параметрами так и не получилось, как это сделать?

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

$result = self::model()->findAll(array('order'=>join(" ", array($sortingField, $sortingOrder)),
                                               'limit'=>join(',', array($firstRowIndex, $rowsPerPage)))); 
Решил делать в лоб, но это что-то мне не нравится, не правильно как-то )

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

$result = self::model()->findAllBySql('SELECT * FROM artists 
                                              ORDER BY '.join(" ", array($sortingField, $sortingOrder)).'
                                              LIMIT '.join(',', array($firstRowIndex, $rowsPerPage))
                                             ); 
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Помогите с CActiveRecord

Сообщение samdark »

Filsh
Пользуйтесь тегом для вставки кода, а то читать очень затруднительно.

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

$result = self::model()->findAll(array(
  'order'=>join(" ", array($sortingField, $sortingOrder)),
  'limit'=> $rowsPerPage,
  'offset' => $firstRowIndex,
));
 
А вообще можно и так: http://rmcreative.ru/blog/post/postrani ... ivka-v-yii
Filsh
Сообщения: 77
Зарегистрирован: 2010.10.17, 11:00
Откуда: Днепропетровск
Контактная информация:

Re: Помогите с CActiveRecord

Сообщение Filsh »

Спасибо, разобрался и прошу прощения что запостил тему не в том форуме )
А вообще можно и так: http://rmcreative.ru/blog/post/postrani ... ivka-v-yii
Дело в том что я делаю разбивку для jqGrid, там так не получается
Ответить