“如何定义”;“全球”;在CakePHP中查找模型的条件?

“如何定义”;“全球”;在CakePHP中查找模型的条件?,cakephp,Cakephp,是否可以定义在使用特定模型的所有控制器和函数中始终有效的查找条件 例如,如果我只想退货库存中的产品,无论发生什么情况。也许在模型中的某个地方: conditions => array('inStock >' => 0) 我想你可以试着在模型上做一个函数,然后用一个简单的行在控制器中调用它 控制器: $productsInStock = $this->Product->getProductsInStock(); function getProductsInStoc

是否可以定义在使用特定模型的所有控制器和函数中始终有效的查找条件

例如,如果我只想退货库存中的产品,无论发生什么情况。也许在模型中的某个地方:

conditions => array('inStock >' => 0)

我想你可以试着在模型上做一个函数,然后用一个简单的行在控制器中调用它

控制器:

$productsInStock = $this->Product->getProductsInStock();
function getProductsInStock() {  
            $produtcsInStock = $this->find('all', array('conditions' => array('inStock >' => 0)));
            return $productsInStock;          
}
型号:

$productsInStock = $this->Product->getProductsInStock();
function getProductsInStock() {  
            $produtcsInStock = $this->find('all', array('conditions' => array('inStock >' => 0)));
            return $productsInStock;          
}

或者试试这个链接,我想它会有帮助的。我对回调一无所知:

您可以通过在特定模型中重写beforeFind()来添加该逻辑:


记住调用parent::beforeFind();刚开始时。

我很接近采用这种方法,但考虑到我有限的编程技能和增加的复杂性,我不得不采用“最佳实践”。)是的,我误解了你的问题,你想强制一个条件来执行模型中的所有find()操作。这就是为什么我建议在找到之前你读对了。这并不是我所期望的那么简单的解决方案。(如模型中的var$订单)hm。。那么拉斐尔的建议并不理想。因为它只是一个预定义的查找('all')。例如,如果在其他地方使用find('list'),则无法强制执行该条件。beforeFind不是黑客攻击,它是为此而设计的。我不明白你的第二句话:beforeFind是一个模型的方法,而不是控制器的方法。使用beforeFind实际上非常简单,我可以用3-4行代码为您编写解决方案。是的,您是对的。首先应该这样做。谢谢,我很高兴帮助您=)在需要不时禁用全局条件的情况下,这可能更可取。使用
beforeFind()
只有在没有手册的情况下才能使用
isset()
应用全局条件,但是如果手动条件类似于
数组('User.is_'u like'=>'%'),