2

这是食谱中的示例:

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 变得更容易,但实际上将某些工作转换为我不知道如何工作的东西似乎需要很多开销。

4

3 回答 3

0

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

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

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

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

传递给的条件find可能比这个简单的例子复杂得多。

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

于 2012-11-23T09:19:10.320 回答
0

Cake 有很多“神奇”的功能。你findBy<columName>甚至可以做到findAllBy<columName>。您还可以链接列名,例如findBy<colum1>And<colum2>.

我建议你阅读他们关于模型的烹饪书文章。这本烹饪书是一个非常好的入门方式,并且可以获得有关框架可以为您做什么的信息。如果您想了解有关某个功能的更多信息,您可以随时查看他们更完整的api 。

于 2012-11-23T01:09:28.360 回答
0

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

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

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

于 2012-11-23T01:12:35.943 回答