Почему Yii Criteria не работает напрямую?

Следующие Criteria работает отлично:

$criteria = new CDbCriteria(array(
'condition' => 'Id_menu = 1 ',
'select' => 'name',
'limit' => 5,
));

$dp1 = new CActiveDataProvider('post', array(
'criteria' => $criteria
));

Однако указав Criteria непосредственно на модели нет — это никак не сказывается:

$criteria = new CDbCriteria(array(
'condition' => 'Id_menu = 1 ',
'select' => 'name',
'limit' => 5,
));

$dp1 = new CActiveDataProvider(Mdlfood::model()->find($criteria),array(),));

Следующее также не работает:

$criteria = new CDbCriteria(array(
'condition' => 'Id_menu = 1 ',
'select' => 'name',
'limit' => 5,
));

$model1 = new Mdlfood;
$model1->findAll($criteria);
$dp1 = new CActiveDataProvider($model1,array(),));

Может кто-нибудь объяснить, почему я не могу объявить эту конфигурацию напрямую?

Добавлен mdlfood

class Mdlfood extends CActiveRecord{
public function tableName()
{
return 'tblfood';
}public function rules()
{

return array(
array('name, Url_picture, Price, Aboute, Id_foodType, Id_menu', 'required'),
array('name', 'length', 'max'=>100),
array('Url_picture, Aboute', 'length', 'max'=>2048),
array('Price, Id_foodType, Id_menu', 'length', 'max'=>20),

array('Id, name, Url_picture, Price, Aboute, Id_foodType, Id_menu', 'safe', 'on'=>'search'),
);
}public function relations()
{

return array(
'idMenu' => array(self::BELONGS_TO, 'Tblrestmenu', 'Id_menu'),
'idFoodType' => array(self::BELONGS_TO, 'Tblfoodtype', 'Id_foodType'),
);
}public function attributeLabels()
{
return array(
'Id' => 'ID',
'name' => 'Name',
'Url_picture' => 'Url Picture',
'Price' => 'Price',
'Aboute' => 'Aboute',
'Id_foodType' => 'Id Food Type',
'Id_menu' => 'Id Menu',
);
}

public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.

$criteria=new CDbCriteria;

$criteria->compare('Id',$this->Id,true);
$criteria->compare('name',$this->name,true);
$criteria->compare('Url_picture',$this->Url_picture,true);
$criteria->compare('Price',$this->Price,true);
$criteria->compare('Aboute',$this->Aboute,true);
$criteria->compare('Id_foodType',$this->Id_foodType,true);
$criteria->compare('Id_menu',$this->Id_menu,true);

return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}

public static function model($className=__CLASS__)
{
return parent::model($className);
}
}

Но я думаю, что это не связано с моделью, потому что эти критерии работают правильно в ActiveDataProvider.

0

Решение

Пожалуйста, попробуйте так,

дополнительные закрывающие скобки, find () -> не в правильном формате

$criteria=new CDbCriteria(array(
'condition'=>'Id_menu = 1 ',
'select'=>'name',
'limit'=>5,
));$dp1 = new CActiveDataProvider(Mdlfood::model()->find($criteria),array()); // extra closing brackets

Второй способ,

$criteria=new CDbCriteria(array(
'condition'=>'Id_menu = 1 ',
'select'=>'name',
'limit'=>5,
));
$model1 = new Mdlfood;
$model1->findAll($criteria);
$dp1 = new CActiveDataProvider($model1,array());
0

Другие решения

Других решений пока нет …