0

在我的 CakePHP2 应用程序的一个controller/index动作中,我有

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

然后,在controller/view我有:

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

这两个工作都非常好,但我显然重复了大量代码(即查找条件、字段列表等),唯一的两个区别是我正在做的第一个find('all')和第二个我'正在做find('first')并提供 id 作为条件之一。

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

4

3 回答 3

0

您可以在您的模型中创建一个方法:

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()));
于 2012-09-24T08:20:17.477 回答
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);
    }
}
于 2012-09-24T08:37:59.043 回答
0

是的,您可以将查询作为函数/方法移动到模型类中。后模型请参见下面的示例:

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

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

并通过 $this->Model->getAll(); 在你的控制器上调用它

$this->Post->getAll();

您还可以向函数添加参数。

于 2012-09-24T04:05:04.793 回答