是否可以将随机行注入现有的Propel ORM查询中?

时间:2016-11-01 14:55:09

标签: php database orm propel propel2

我们假设我有一个名为article的数据库表,每篇文章都分配了type(1 =标准文章,2 =赞助文章等)。

使用Propel 2,是否可以执行以下操作?

步骤1:选择type = 1的10篇最新文章(有序降序)(这不是一件容易的事)。

$articles = ArticleQuery::create()
    ->filterByType(1)
    ->orderByPublishedAt('desc')
    ->limit(10)
    ->find();

第2步:选择type = 2的2 随机文章,随机将它们插入当前$articles对象。这是我感到茫然的一步。

例如,最终得到的结果将如下所示:

  1. 标准文章
  2. 标准文章
  3. 随机赞助文章(随机插入)
  4. 标准文章
  5. 标准文章
  6. 随机赞助文章(随机插入)
  7. 标准文章
  8. 标准文章
  9. 标准文章
  10. 标准文章
  11. 标准文章
  12. 标准文章
  13. 似乎我应该能够通过编写某种ArticleQuery函数来扩展insertRandomSponsoredArticles()类,但我不太清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

应该可能。您也许可以添加自己的终止子函数来处理数组。在您的ArticleQuery类中是这样的。

public function insertRandomSponsoredArticles(array $articles)
{
    $results = $this->find()->toArray();
    $count = count($results);
    $pos1 = rand(0, $count-1); // Random position 1
    $pos2 = rand(0, $count-1); // Random position 2

    array_splice($results, $pos1, 0, $articles[0]);
    array_splice($results, $pos2, 0, $articles[1]);

    return $results;
}

然后也许像这样使用它:

$articles = ArticleQuery::create()
    ->filterByType(1)
    ->orderByPublishedAt('desc')
    ->limit(10)
    ->insertRandomSponsoredArticles($randArticles);