【问题标题】:How to order joined results in Phalcon Framework如何在 Phalcon 框架中订购连接的结果
【发布时间】:2015-10-03 09:33:22
【问题描述】:

假设我正在编写一本杂志,其中一个类别(如“运动”、“艺术”等)可以包含几篇文章。因此,我想提取特定类别的所有文章。在 Phalcon 我通常会这样做:

$category = \Models\Category::findFirst(array(
    'conditions' => 'id = ?1',
    'bind'       => array(1 => $id)
));

然后:

foreach ($category->Article as $article) {
    // do something with $article
}

效果很好,但我想对这些文章进行排序 - 比如说 - 日期明智,升序。我怎么能做到这一点?

【问题讨论】:

    标签: php database phalcon


    【解决方案1】:

    你应该在你的for..loop 语句中使用get 前缀,所以你的代码应该是这样的:

    foreach ($category->getArticle(array('order' => 'date DESC')) as $article) {
        // do something with $article
    }
    

    主要的Docs 解释了更多示例。
    试一试,得到你的结果。

    【讨论】:

    • 好点。实际上,我在使用“裸”字段“日期”时遇到了一个严重错误:Can't obtain model's source from models list: 'CMS\Models\Article'。我最终做了类似foreach ($category->getArticle(array('order' => '[\CMS\Models\Article].date DESC'))(注意方括号)之类的事情,正如here所建议的那样。
    • 好的,我认为因为您在模型中使用命名空间,所以您应该更喜欢命名空间在字段名称之前。
    【解决方案2】:

    M2sh 的回答很重要也很实际,我只是发一个次要的方法,只是使用专为文章设计的模型:

    $page = 5; // eg. 5th page of results
    $limit = 100; // eg. 100 results per page
    
    $articles = \Models\Articles::find(array(
        'conditions' => 'category_id = :cid:',
        'bind' => array(
            'cid' => $id
        ),
        'order' => 'date DESC, id DESC',
        'limit' => $limit,
        'offset' => $page * $limit
    ));
    

    也可以在 M2sh 中使用这样的一组参数。

    【讨论】:

      【解决方案3】:

      为了完整性,还有一个。我将借用 yergo 来说明差异:

      $page = 5;
      $limit = 100;
      
      $articles = \Models\Articles::query()
          ->where('category_id= :cid:', array('cid' => $id)
          ->orderBy('date DESC, id DESC')
          ->limit($limit)
          ->offset($page * $limit)
          ->query();
      

      【讨论】:

      • 您也可以使用bind,如果您必须将许多不同的变量绑定到查询中,这有时会更清楚。
      • 或者您可以将绑定参数数组传递给query()iirc。通过queryBuilder 构建的查询以这种方式处理,这对于学习一些更复杂的查询很重要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多