Yii 是否支持连贯写法?

Yii




$criteria = new CDbCriteria;

$criteria->select = array('你要查询的字段');

$res = Model::model()->findAll($cirteria);



QeePHP




$res = Model::find()->setColumns(array('要查询的字段'))->getAll();



个人感觉 Qeephp 这样更方便一点,Yii 每次都要 CDBCriteria 有点麻烦。

支持findBySql()

不支持,qee在模型操作方面下了大功夫,特别是关联操作,不过缺点也是显然而见的,就是复杂的框架代码,不利于框架的升级

yii虽然连基本的关联操作都没有做,正因为如此,核心代码可以写的更为简单和有效,yii的关联查询、读取方面,还是做得非常不错的~

Tks

你可以使用数组表达criteria:




$models=Post::model()->findAll(array(

    'select'=>'title, author',

    'condition'=>'xxx',

    'order'=>'xxx',

));



任何CDbCriteria的属性都可以在上述数组里指定。

要实现连贯操作并不难,之所以没实现出于两个考虑:

  1. 连贯操作函数名占据了额外的命名空间

  2. 在实践中,我们往往需要把查询条件当作参数传递。连贯操作在这方面无能为力。

qiang,请教一个问题,

我想做一个 RecycleBin 的行为插件,初步想法是在插件中,利用 beforeFind() 事件,

增加 is_recycled=0 的条件,

现在遇到的问题是,我是否能够在插件中的 beforeFind() 事件中 获取到所有的查询条件?

因为我需要判断,当前查询,是否有包括 is_recycled 的条件,假如有,则不做任何处理,

假如没有,则默认给增加 is_recycled=0 的条件~

即:

Post::model()->findAll(); – 会默认给加上 is_recycled=0的条件

Post::model()->findAll(array(‘condition’=>‘is_recycled=1’)); – 插件将不加任何查询条件

你可以在beforeFind()里修改ar的criteria属性,添加这个条件。不过目前AR的实现你无法在插件里知道查询的条件。你可以提交一个ticket。

http://code.google.com/p/yii/issues/detail?id=698

已经提交了 ticket~

之前提交了一个ticket,貌似没有被审核通过 :(