findAll и with - возвращает неверный массив

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

findAll и with - возвращает неверный массив

Сообщение Nafania »

Есть две модели OrderGood и Goods
делаю запрос

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

$condition = new CDbCriteria();
$condition->compare('og_order_id', $id);
$Goods = OrderGood::model()->with('goods')->findAll($condition); 
между ними отношение

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

'goods' => array(self::BELONGS_TO, 'Goods', 'og_good_id'), 
Модель OrderGood не имеет первичного ключа, поэтому он задан в моделе как

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

    public function primaryKey() {
        return array('og_order_id');
    } 
В итоге, после findAll я получаю массив с одним элементом модели, хотя в базе их 3 и тот sql запрос, который генерируется при использовании findAll возвращает именно 3 позиции, а не 1.

Где косяк, куда деваются данные?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

ап, никто не сталкивался или это баг Yii?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

Ап, чего делать-то, если это ошибка Yii, то тикет создавать или это все же моя ошибка?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение samdark »

Какая версия Yii?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

Version 1.1.5 November 14, 2010
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение samdark »

Стоит попробовать 1.1.6 и SVN.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

в yii-1.1.6.r2877 тоже самое
в текущем найти билде вообще появился еще один совершенно левый запрос к базе, которого у меня в коде нет, а предыдущий запрос так и возвращает неверные данные.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение samdark »

Левый запрос поправили, тему утащил в баги.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

А как сей баг будет решатся?
Может какие-либо дополнительные данные нужны?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение samdark »

Дамп таблиц для двух моделей, модели и код из контроллера, который даёт неверный результат.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

Модели и sql в аттаче в архиве.
Код контроллера:

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

    public function actionView($id)
    {
        $Order = $this->loadModel($id);

        $_userRole = User::model()->getUserRole();

        $condition = new CDbCriteria();
        $condition->compare('og_order_id', $id);

        if ( $_userRole == 'Trader' ) {
        $condition->compare('good_owner', Yii::app()->user->getId());
        }

        $Goods = OrderGood::model()->with('goods')->findAll($condition);

        $this->pageTitle = Yii::t('orders', 'Просмотр заказа #' . $id);
        $this->breadcrumbs[] = 'Просмотр заказа #' . $id;

        $this->render('view',array(
        'Goods' => $Goods,
        'Order' => $Order,
        ));
    } 
Вложения
models.rar
(14.67 КБ) 187 скачиваний
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение slavcodev »

кажется из той же оперы:
Контроллер

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

$photosCriteria=new CDbCriteria(array(
    'with'=>array('users'),
    'condition'=>'userid=2',
    // причем если убрать лимит то нормально все
    'limit'=>4,
));
$photos=PhotoModel::model()->findAll($photosCriteria); 
Модель Photo

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

class PhotoModel extends CActiveRecord
{
    public function relations()
    {
        return array(
            'users'=>array(self::MANY_MANY,'TeamModel','users_photos(photoid,userid)',),
        );
    }
} 
Модель User

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

class TeamModel extends EUserModel
{
    public function relations()
    {
        return CMap::mergeArray(parent::relations(),array(
            'photos'=>array(self::MANY_MANY,'PhotoModel','users_photos(userid,photoid)',),
        ));
    }
} 
Вот скл, как видно он не подключает связь

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

CDbCommand::fetchAll() failed: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'userid' in 'where clause'. The SQL statement executed was: SELECT `t`.`id` AS `t0_c0`, `t`.`path` AS `t0_c1` FROM `photos` `t` WHERE (userid="2") LIMIT 4.
Жду Yii 3!
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

Не, у меня из другой, так как у меня запрос правильный формируется, что через лог видно.
Только вот в Yii что-то непонятное.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: findAll и with - возвращает неверный массив

Сообщение slavcodev »

признаю, тему не читал, остановился только на заголовке.
Жду Yii 3!
Аватара пользователя
creocoder
Сообщения: 138
Зарегистрирован: 2010.01.24, 05:29
Откуда: Тамбов

Re: findAll и with - возвращает неверный массив

Сообщение creocoder »

Nafania писал(а):Не, у меня из другой, так как у меня запрос правильный формируется, что через лог видно. Только вот в Yii что-то непонятное.
Опишите что конкретно.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

creocoder писал(а):
Nafania писал(а):Не, у меня из другой, так как у меня запрос правильный формируется, что через лог видно. Только вот в Yii что-то непонятное.
Опишите что конкретно.
В первом сообщении темы написано.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: findAll и with - возвращает неверный массив

Сообщение Nafania »

Что-нибудь есть по решению бага?
Ответить