【问题标题】:Why Yii Criteria does not work directly?为什么 Yii Criteria 不能直接工作?
【发布时间】:2015-06-13 05:47:15
【问题描述】:

以下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);
}
}

但是,我认为这与模型无关,因为此 Criteria 在 ActiveDataProvider 中正常工作。

【问题讨论】:

  • 会出现什么错误?
  • 无错误,但标准无效

标签: php yii criteria


【解决方案1】:

请这样尝试,

额外的右括号,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());

【讨论】:

  • tanx for answer Manadh,这是打错了,但只在这里
  • 你能粘贴模型类 Mdlfood() 吗?
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2021-02-03
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
相关资源
最近更新 更多