Выборка записи.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Выборка записи.

Сообщение IvanS »

Добрый день!

Прошу помощи.

Как мне выбрать последнюю запись из таблицы?

Есть модель Fields и таблица fields.

Пробовал так:

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

$model = new Fields();
                $field = $model -> find();
echo $field->size;
 
Ничего не выводит, но запись есть
Аватара пользователя
vbolshakov
Сообщения: 32
Зарегистрирован: 2011.10.11, 16:42
Откуда: Ярославль, Москва
Контактная информация:

Re: Выборка записи.

Сообщение vbolshakov »

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

$fieldCriteria = new CDbCriteria(array(
    'order' => 't.id DESC',
    'limit' => 1
));

$field = Fields::model()->find($fieldCriteria);
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

ФУФ! Спасибо огромное!
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

Прошу прощения. Еще попутный вопрос.

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

$fields = Fields::model() -> find(array (
                                                    //'order' => 'field_id DESC',
                                                    'limit' => 1));

                $field = $fields -> field_size;

               echo var_dump($field); 
Выдает string(3) "156", что верно.

Но если оставляю 'order' => 'field_id DESC',
То результат: string(2) "56"

Почему?
IvanS
Сообщения: 25
Зарегистрирован: 2012.03.12, 20:33

Re: Выборка записи.

Сообщение IvanS »

Мой косяк. Можно закрывать. Спасибо
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

Не хотел открывать ещё одну тему, подскажите, как достать из таблицы inbox, в которой хранятся письма от пользователей, по одному последнему письму каждого пользователя.
SQL-запрос:

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

SELECT email, content, date
FROM inbox i1
WHERE date = (SELECT MAX(date) FROM `inbox` i2 WHERE i1.email = i2.email)) 
Запрос работает, но может быть корявый, конечно (поправьте, если сможете).
Вторая проблема вывести результат в GridView, в него нужно передавать объект, а не выборку...

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

public function actionIndex()
{
   $select = Inbox::model()->findAllBySql('SELECT email, content, date FROM inbox i1 WHERE date = (SELECT MAX(date) FROM inbox i2 WHERE i1.email = i2.email))');

   $this->render('index', array(
      'model'=>$select,
   ));
}
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

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

SELECT email, content, date
FROM inbox i1
GROUP BY user_id
HAVING MAX(`date`) 

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

public function actionIndex()
{
   $sql = ''; // Тут вписываете запрос
   $dataProvider = new CSqlDataProvider($sql);

   $this->render('index', array(
      'dataProvider'=>$dataProvider,
   ));
}
 
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

Спасибо, но возникает ошибка:
CSqlDataProvider and its behaviors do not have a method or closure named "getValidators"
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

покажите view
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

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

<?php

$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'mainViewgrid',
    'dataProvider'=>$model,
    'filter'=>$model,
    'columns'=>array(
        array(
            'header'=>'№',
            'value'=>'$row+1',
        ),
        array(
            'header'=>'email-адрес',
            'name'=>'email',
            ),
        array(
            'header'=>'владелец',
            'name'=>'owner',
            ),
        array(
            'header'=>'содержимоеt',
            'name'=>'content',
            ),
        array(
            'header'=>'дата получ.',
            'name'=>'date',
            ),
),
)); 
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

Если это mysql то должен же быть конфликт имен тут:

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

SELECT email, content, date
из за date, а не `date`.
Yii2 universal module sceleton - for basic and advanced templates
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

также я ещё применял в других столбцах 'value' , 'visible', 'type'.... но самое простое - то, что я написал выше уже не работает...
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

maleks, функции типа findAllBySql() допускают опускание таких кавычек и отрабатывают правильно.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

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

public function actionIndex()
{
   $sql = ''; // Тут вписываете запрос
   $dataProvider = new CSqlDataProvider($sql);
$model = new Indox();
   $this->render('index', array(
      'dataProvider'=>$dataProvider,
      'model'=>$model
   ));
}

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

$this->widget('bootstrap.widgets.TbGridView', array(
    'type'=>'striped bordered condensed',
    'id'=>'mainViewgrid',
    'dataProvider'=>$dataProvider,
    'filter'=>$model,
deadanarhist
Сообщения: 37
Зарегистрирован: 2012.10.05, 12:19

Re: Выборка записи.

Сообщение deadanarhist »

anton44eg, спасибо! Ты крут!!!!!!!!

Правда теперь пропали сортировки и поиск по столбцам, который вверху грида....
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

сортировки можно указать в конструкторе CSqlDataProvider
фильтры вроде тоже
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

deadanarhist писал(а):maleks, функции типа findAllBySql() допускают опускание таких кавычек и отрабатывают правильно.
Странно, не знаете за счет чего? В смысле ссылку на код который такие кавычки добавляет в тело сырого текста запроса.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Выборка записи.

Сообщение anton44eg »

ИМХО это PDO старается
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Выборка записи.

Сообщение flashimage »

да походу prepared statement
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Выборка записи.

Сообщение maleks »

Проверил этот момент. Оказалось просто что date среди исключений совпадений, которые можно применять.
Для остальных, если вдруг совпадает, надо обрамлять кавычками. PDO ничего подобного не делает, будет ошибка.
Yii2 universal module sceleton - for basic and advanced templates
Ответить