【问题标题】:fetch only 'enabled' records from the database in cakephp v1.3在 cakephp v1.3 中仅从数据库中获取“启用”记录
【发布时间】:2010-06-29 06:40:06
【问题描述】:

有没有办法只获取 cakephp v1.3 中“status = 1”的模型记录?

我在我的网络应用程序的每个表中都创建了一个名为“状态”的字段。

我有一个名为“消息”的模型。我想要的是只显示那些消息,包括在具有“状态 = 1”的搜索结果中。 'status = 0' 的消息将不会显示,也不会包含在搜索结果中。

如果我能用 cakePHP 的方式做到这一点,请帮助我,现在作为临时解决方案,我在每个消息查找的条件数组中使用 'status = 1'。

谢谢

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    我会将其包含在beforeFind() 回调方法中。您可以将它包含在每个模型的回调中(但每个模型只包含一次 - 而不是每个查询),或者您可以将它应用到您的 AppModel 以便您的所有其他模型继承它.

    beforeFind()回调中,可以修改查询的结构。在这种情况下,您需要将条件 array( 'status' => 1 ) 应用于传入查询。转储参数数据结构以查看传入的内容,我认为这对您有意义。

    请注意,如果您选择在 AppModel 中执行此操作,并且将来必须创建特定于模型的 beforeFind 回调,则需要确保在您的子类中调用 parent::beforeFind()'@ 987654328@方法。

    【讨论】:

    • 这种方法的主要问题是,当我使用 $this->paginate['Message'] 在索引操作中显示我的消息时,我再次必须再次编写条件“消息.status = '1' " :-( cakephp 家伙应该在即将发布的版本中包含此功能。
    【解决方案2】:

    通过 here 找到答案,beforeFind() 回调就派上用场了。

    喜欢这个

    public function beforeFind($conditions) {
        if(!isset($conditions['conditions']['Message.status']) && !isset($conditions['conditions']['status'])) {
            $conditions['conditions']['Message.status'] = 1;
        }
        return $conditions;
    }
    

    【讨论】:

      【解决方案3】:

      基本上你说的是软可删除行为。有一个here 对我来说它并不完美,但对于简单的应用程序它可以完成这项工作。在 cmets 中你也可以看到改进:)

      但在 AppModel 中扩展 beforeFind() 也应该没问题。

      【讨论】:

        猜你喜欢
        • 2011-05-29
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多