我如何在Symfony 1.4中使用一种方法与几个Propel模型


How can I use one method with several Propel models in Symfony 1.4?

我有一种方法,可以从数据库中的表中获取所有行,其顺序在参数中指定:

public static function getAllOrderedBy($orders = null)
    {
        $criteria = new Criteria();
        if(is_array($orders))
        {
            foreach($orders as $column => $order)
            {
                if($order == 'asc')
                {
                    $criteria->addAscendingOrderByColumn($column);
                }
                else if($order == 'desc')
                {
                    $criteria->addDescendingOrderByColumn($column);
                }
            }
        }
        else if($orders != null)
        {
            $criteria->addAscendingOrderByColumn($orders);
        }
        return self::doSelect($criteria);
    }

此方法发生在PagePeer类中,但我想将其用于几个模型,如LinkPeerSubjectPeer。我可以将这段代码从一个模型复制粘贴到另一个模型,但我想问的是,是否有更好的方法让这个方法对所有这些类都可用?

如果用法会改变,这不是问题,所以我不会调用PagePeer:getAllByOrder(PagePeer::TITLE),而是其他东西,我只是不想将此代码复制到它所使用的每个模型。

有两种方法可以做到这一点。

  • 推动behviors。文档说明,您可以通过staticMethods()
  • 向对等类添加静态方法。
  • Symfony mixin。它们被记录在The Definitive Guide to symfony 1.0中。参见第17章-扩展Symfony。在本指南的新版本中,关于mixins的信息被删除了,但sfMixer类的代码似乎没有改变(sf1.0中的sfMixer和sf1.4中的sfMixer)
相关文章: