raa
(Rudenkosasha)
March 10, 2010, 2:38pm
1
не могу понять почему возвращается пустой запрос.
Вот исходные данные
class products extends CActiveRecord {
const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 0;
// skip some code
public function getAllProducts() {
$criteria = new CDbCriteria();
$criteria->condition = "visible = :visible";
$criteria->params = array(':visible' => products::STATUS_ACTIVE);
$criteria->sort = 'pos ASC';
return products::model()->findAll($criteria);
}
}
так вот вызов метода возвращает пустой запрос.
хотя на самом деле, если взять запрос из XWebDebugRouter и запустить в phpmyadmin то записи есть.
выборка элементарная, но где ошибка не могу понять
если убрать condition & params то все работает.
spk
(Sitepodkluch)
March 10, 2010, 7:00pm
2
ВОт эта строчка точно верная ?
andy_s
(Arekandrei)
March 10, 2010, 7:03pm
3
raa
(Rudenkosasha)
March 10, 2010, 7:31pm
5
НО, дело в том что эта строчка ничего не ломает и с ней все работает.
а вот с condition & params нулевой результат.
napeHeK
(Napehek)
March 10, 2010, 8:44pm
6
Конечно не ломает, переменная вообще не используется. Измените строку на
$criteria->order = 'pos ASC';
По теме
class MyClass
{
public $text = '';
public function echo()
{
echo $this->text;
}
}
$class = new MyClass;
$class->string = 'Hello world!';
$class->echo(); //Почему же у меня не выводится Hello world! ..? <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />
raa
(Rudenkosasha)
March 10, 2010, 9:56pm
7
napeHeK:
Конечно не ломает, переменная вообще не используется.
По теме
class MyClass
{
public $text = '';
public function echo()
{
echo $this->text;
}
}
$class = new MyClass;
$class->string = 'Hello world!';
$class->echo(); //Почему же у меня не выводится Hello world! ..? <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />
с вашим примером все ясно )
неужели у меня такая же ошибка, а я ее не вижу ?
napeHeK
(Napehek)
March 10, 2010, 10:49pm
8
public function getAllProducts()
{
$criteria = new CDbCriteria();
$criteria->condition = 'visible = :visible';
$criteria->params = array(':visible' => products::STATUS_ACTIVE);
$criteria->order = 'pos';
return products::model()->findAll($criteria);
}
Или так
public function getAllProducts()
{
return products::model()->findAll(array(
'condition' => 'visible = :visible',
'params' => array(':visible' => products::STATUS_ACTIVE),
'order' => 'pos',
));
}
raa
(Rudenkosasha)
March 11, 2010, 9:47am
9
napeHeK:
public function getAllProducts()
{
$criteria = new CDbCriteria();
$criteria->condition = 'visible = :visible';
$criteria->params = array(':visible' => products::STATUS_ACTIVE);
$criteria->order = 'pos';
return products::model()->findAll($criteria);
}
Или так
public function getAllProducts()
{
return products::model()->findAll(array(
'condition' => 'visible = :visible',
'params' => array(':visible' => products::STATUS_ACTIVE),
'order' => 'pos',
));
}
вообще-то это два идентичных способа и как не странно результат один и тот же (
andy_s
(Arekandrei)
March 11, 2010, 10:05am
10
А если в контроллере сделать так, то нормально работает?
$criteria = new CDbCriteria;
$criteria->condition = 'visible = 1';
$models = products::model()->findAll($criteria);
Вообще, в этом случае подход должен быть иной, с использованием scopes:
public function scopes()
{
return array(
'visible'=>array(
'condition'=>'visible = '.self::STATUS_ACTIVE,
),
);
}
Затем в контроллере:
$models = products::model()->visible()->findAll();
raa
(Rudenkosasha)
March 11, 2010, 1:44pm
11
черт, проблема была в типе поля, enum (‘0’,‘1’)