为什么$ uses在cakePHP中被认为是不好的做法?

时间:2011-07-31 02:54:15

标签: php cakephp cakephp-appmodel

我有3个包含用户信息的表,一个用于学生,一个用于教师,一个用于管理员。

他们没有任何关系。我不想为管理员创建一个仪表板,其中会显示学生和教师的列表。

我发现实现此目的的唯一方法是在Administrators控制器中使用$uses变量。但是,我在很多地方都读到这是不好的做法。

任何解决方案?

3 个答案:

答案 0 :(得分:3)

另一种可能更好的做法是使用ClassRegistry::init('MyModel')->myMethod()more reading @ Cake API

这仅在使用对象时加载对象,而不是loadModeluses,而ClassRegistry模型被视为单例。

-

  

你做错了什么:你需要访问与当前控制器无关的模型。

在很多条件下,您需要从一个控制器访问所有模型数据,但在没有违反惯例的情况下,从来没有明确的答案如何做到这一点!

答案 1 :(得分:2)

您始终可以使用另一个使用

无关的模型
    $this->loadModel('NewModelName');

然后您可以通过以下方式访问新加载的模型:

    $this->NewModelName->add();    // whatever method model has defined

为什么更喜欢使用loadModel()?

获得表现。 如何?使用调用loadModel函数本身来加载您在uses数组中指定的所有模型。但问题是如果你的一个动作只需要一个特定的模型,那么将它包含在每个动作中都是好事。例如只有add()动作需要一个不相关的模型,但是如果你在uses数组中指定它,无论调用什么动作,都会加载完全不相关的模型。简单来说,这将是低效的。它就像你在C程序中声明了变量但从未使用它们。如果C编译器会警告你没有使用你的变量,但不幸的是,蛋糕无法告诉你。

如果您的所有操作都需要加载该模型,则可以使用,否则请使用loadModel()。

答案 2 :(得分:1)

你可能在另一个问题上没有看到我的回答:))

  

我有3个表包含用户信息,一个用于学生,一个用于教师,一个用于管理员。他们没有任何关系。我不想为管理员创建一个仪表板,其中会显示学生和教师的列表。

问题是您将类似数据分成3个不同的表,在本例中是用户信息。因此,当您尝试管理这些数据时,您会遇到困难:因为当您在3个表中将它们分开时,您会忽略这些关系。

  

我发现实现此目的的唯一方法是在Administrators控制器中使用$ uses变量。

你对控制器有错误的想法。每个控制器管理特定模型(和相关模型)的数据流。这并不意味着您必须留在Admin控制器中来执行管理操作。 您想要操作的模型决定了您需要的控制器。

  

但是,我在很多地方都读到这是不好的做法。

现在主要问题是:使用$ uses是一个红色标记,表明你做错了什么:你需要访问一个与当前控制器无关的模型。现在,编程总是有例外,有时我们需要访问该模型。这就是loadModel的用武之地。因为它应该很少见。如果你需要很多模型,那么你需要经常调用loadModel,这很麻烦,这就是$ use的用途,但那意味着你的应用程序设计有问题:))

所以,你可以说使用$ uses是一个错误决定的标志(在数据库设计或应用程序结构中);所以正在使用loadModel。

修改:Any solutions? 我在你的另一个问题中提出了一个解决方但是如果你想将它们全部集中在一个地方,你可以拥有1个用户信息表。每个用户都可以拥有一个学生,教师,管理员和一个“组”字段来决定用户所在的组。第三种解决方案是使用$ uses。它的性能影响确实不是问题。但是,当您进一步开发应用程序时,它会非常复杂。这就是你需要担心的事情。例如,我可以说,如果你使用Auth,你需要稍微调整它以使其与3个模型一起使用。如果您使用users表,那将更容易。