cakePHP模型函数如何工作?

时间:2012-11-23 01:02:00

标签: php cakephp cakephp-appmodel

这是食谱中的例子:

class IngredientsController extends AppController {

    public function index() {
        //grab all ingredients and pass it to the view:
        $ingredients = $this->Ingredient->find('all');
        $this->set('ingredients', $ingredients);
    }

所以看起来我们正在使用find('all')并将所有这些返回到索引。我想我们还可以创建一个名为frenchIngredients()的方法,它将返回所有法国成分。

我的问题是我是否必须为每个想要控制器的查找条件创建单独的函数?

我对cakePHP真的很新,所以也许我只是不明白这是怎么回事,但是我看到它的方式,我将不得不创建大量的函数和/或视图只是为了解决查找条件的变化。

cakePHP是不是很糟糕,或者我错过了什么?我认为它会让我的PHP OOP更容易,但实际上它似乎需要很多开销才能将某些东西转化为我不知道如何工作的东西。

3 个答案:

答案 0 :(得分:0)

Cake有很多“神奇”功能。您可以findBy<columName>甚至findAllBy<columName>。您还可以将列名称链接为findBy<colum1>And<colum2>

我建议你阅读他们的cook book article on models。烹饪书是一个非常好的开始,并提供有关框架可以为您做什么的信息。如果您想了解有关某项功能的更多信息,可以随时查看更为完整的api

答案 1 :(得分:0)

在ZF和Codeigniter等任何框架中,我认为这实际上是构建模型的过程。

在CakePHP的示例中,如果您使用Bakery创建它,那么您已经拥有此功能。每个模型都包含许多数据库功能,但您的工作是扩展它。并非所有事情都已在您的模型中完成。

我唯一可以建议的是确保并确保在构建Model方法时不要多余。如果您认为“freshIngredients”与其他模型相同,您可以实现基本模型并将其扩展到新模型。就像使用“newItems”方法创建一个Base模型一样,它将返回新添加的项目或者在你的部分中它是成分。

答案 2 :(得分:0)

很高兴没有必要为每个简单的条件查找创建一个函数。

find函数需要多个参数(请参阅Retrieving Your Data中的文档),其中一个参数是查找条件。

你想只取法国食材吗?假设您有成分类别,并且“法国成分”类别的ID为2,您可以这样做:

$this->Ingredient->find('all', array('conditions' => array('category_id' => 2)));

传递给find的条件可以是much more complex,而不是这个简单的例子。

但是当然,当你有一些比简单查找查询更复杂的逻辑时,在模型中创建函数通常是有意义的。