在Cake 2中的相同条件集上运行find('all')或find('first')

时间:2012-09-24 03:45:55

标签: cakephp

在我的CakePHP2应用中的controller/index动作中,我有

$this->Model-find('all',array( ... lots conditions and things... ));

然后,在controller/view我有:

$this->Model-find('first',array( ... lots conditions and things... ));

这两项工作都很好,但我显然重复了一大块代码(即查找条件,字段列表等),只有两个区别在于我在做的第一个{{1在第二个我正在做find('all')并提供id作为其中一个条件。

有没有办法可以将条件移动到模型中,然后在这些条件下运行不同类型的查找?

3 个答案:

答案 0 :(得分:0)

是的,您可以将查询作为函数/方法移动到模型类中。见后模型的样本:

class Post extends AppModel {
    public $name = 'Post';

    public function getAll() {
       return $this->find('all', array('limit' => 20, 'order' => 'Post.created DESC'));
    }
}

并通过$ this->模型 - > getAll();

在您的控制器上调用它
$this->Post->getAll();

您还可以在函数中添加参数。

答案 1 :(得分:0)

您可以在Youur模型中创建方法:

public function getConditions($id = null) {
   return array( ... lots conditions and things... );
}

在此方法的某处,只测试(!empty($id))是否返回正确的结果。 (你没有提供'条件和事物',所以我不能在这里写出确切的代码......

并在两个控制器操作中使用它:

$this->Model->find('first', $this->Model->getConditions()));

$this->Model->find('all', $this->Model->getConditions()));

答案 2 :(得分:0)

添加条件作为控制器的属性

class FoosController extends AppController{

    public $conditions = array( ... lots conditions and things... )

    public function index(){
        $this-Foo->find('all', $this->conditions);
    }

    public function view(){
        $this-Foo->find('first', $this->conditions);
    }
}