Как обновить записи в базе по criteria?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
ninzzo
Сообщения: 348
Зарегистрирован: 2014.04.25, 07:29

Как обновить записи в базе по criteria?

Сообщение ninzzo »

Есть поиск из базы:

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

$criteria=new CDbCriteria();
    $data11 = time();
    $criteria->condition = 'status = "save" AND data_publ <= "'.$data11.'" AND new = "0"';
    $admin2=Report::model()->findAll($criteria); 
находит 50 записей.
Как теперь во всех записях сделать new = "1" ???

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

$admin2->new="1";
$admin2-save(); 
не катит. А в мануале на сайте

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

Post::model()->updateAll($attributes,$condition,$params); 
только что писать в эти $attributes,$condition,$params и как ? Мой способ выше - круче)
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Как обновить записи в базе по criteria?

Сообщение Choo »

Используйте placeholder'ы в условиях.

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

$data11 = time();
$criteria = new CDbCriteria();
$criteria->condition = 'status = "save" AND data_publ <= :date AND new = "0"';
$criteria->params = array(':date' => $data11);
Report::model()->updateAll(array('new' => 1), $criteria);
эквивалентно

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

$data11 = time();
Report::model()->updateAll(array('new' => 1), 'status = "save" AND data_publ <= :date AND new = "0"', array(':date' => $data11)); 
Аватара пользователя
ninzzo
Сообщения: 348
Зарегистрирован: 2014.04.25, 07:29

Re: Как обновить записи в базе по criteria?

Сообщение ninzzo »

Ок круто. Работает.

А еще один запрос подскажите как сделать

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

$allLogins = Report::model()->findAllByAttributes(
array(
    'sujet' => $st->sujet,
    //как указать id не равно $id  ???
    ),
array(
    'order' => 'id desc',
    'limit' => 3,
    
)); 
Вот в запрос выше надо указать что бы id не равно. Пишу NOT LIKE, выдает ошибку.
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Как обновить записи в базе по criteria?

Сообщение flashimage »

<>
!=
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Choo
Сообщения: 154
Зарегистрирован: 2011.09.20, 22:58

Re: Как обновить записи в базе по criteria?

Сообщение Choo »

findAllByAttributes для этого не подойдет, используйте findAll с condition и params, как в примере выше, в condition будет "!=".
Аватара пользователя
ninzzo
Сообщения: 348
Зарегистрирован: 2014.04.25, 07:29

Re: Как обновить записи в базе по criteria?

Сообщение ninzzo »

Получилось. Благодарю))

А как сделать что если не найдет запись в базе то искать другую

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

$gl_rep = Report::model()->findByAttributes(
    array('glavnaya'=>"1"));
//если не нашло то взять другую запись с рандомным id с этой же базы?  

 
как правильно проверить или нашло?
как найти рандомную запись и только одну в Report ?
Аватара пользователя
AlexxxT
Сообщения: 59
Зарегистрирован: 2013.02.17, 15:17
Откуда: Kiev

Re: Как обновить записи в базе по criteria?

Сообщение AlexxxT »

ninzzo писал(а): как правильно проверить или нашло?
Проверить.

http://www.yiiframework.com/doc/api/1.1 ... tes-detail

{return} CActiveRecord the record found. Null if none is found.
Аватара пользователя
AlexxxT
Сообщения: 59
Зарегистрирован: 2013.02.17, 15:17
Откуда: Kiev

Re: Как обновить записи в базе по criteria?

Сообщение AlexxxT »

ninzzo писал(а):

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

$gl_rep = Report::model()->findByAttributes(
    array('glavnaya'=>"1"));
//если не нашло то взять другую запись с рандомным id с этой же базы?  

как найти рандомную запись и только одну в Report ?
Например так

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

$max = Report::model()->count();
$offset = rand(0,$max);
$model = Report::model()->find(array('offset'=>$offset));
 
Аватара пользователя
ninzzo
Сообщения: 348
Зарегистрирован: 2014.04.25, 07:29

Re: Как обновить записи в базе по criteria?

Сообщение ninzzo »

$max = Report::model()->count();

покажет количество записей в базе, например 100

$offset = rand(0,$max);

выберет допустим 98


$model = Report::model()->find(array('id'=>$offset));

а все id начинаются с 1001

тогда снова не найдет ничего ?

Ну ок спасибо. я просто не знал как рандомно искать. Хороший способ.
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Как обновить записи в базе по criteria?

Сообщение flashimage »

Если записей не много можно использовать $criteria->order = 'rand()';

$model = Report::model()->find(array('id'=>$offset)); - а чего вы id сюда поставили? )) с офсетом будет работать))
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Как обновить записи в базе по criteria?

Сообщение mickgeek »

Также почитайте информацию здесь о выборке случайных записей.
Ответить