1

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

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

第 1 步:选择 10 篇最新文章,按降序排列type = 1(这很简单)。

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

第二步:随机选择2篇文章,type = 2随机插入到当前$articles对象中。这是我不知所措的一步。

例如,最终生成的选择将如下所示:

  1. 标准文章
  2. 标准文章
  3. 随机赞助文章(此处随机插入)
  4. 标准文章
  5. 标准文章
  6. 随机赞助文章(此处随机插入)
  7. 标准文章
  8. 标准文章
  9. 标准文章
  10. 标准文章
  11. 标准文章
  12. 标准文章

似乎我应该能够ArticleQuery通过编写某种insertRandomSponsoredArticles()函数来扩展类,但我不太确定如何去做。

4

1 回答 1

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);
于 2019-09-12T20:44:44.587 回答