Symfony2 Doctrine从一个类别中获取随机产品

Den*_*lle 5 php entity doctrine relationships symfony

我有以下数据库方案:

table 'products'
id
category_id
Run Code Online (Sandbox Code Playgroud)

当然还有一个类别表,只有一个id.

数据看起来像这样:

Products
--------------------
| id | category_id |
--------------------
| 0  | 1           |
| 1  | 1           |
| 2  | 1           |
| 3  | 2           |
| 4  | 2           |
| 5  | 1           |
--------------------
Run Code Online (Sandbox Code Playgroud)

我想选择一个类别(例如类别1),因此我在product-repository类中选择该类别中的所有行:

return $this
    ->createQueryBuilder('u')
    ->andWhere('u.category = :category')
    ->setMaxResults(1)
    ->setParameter('category', $category->getId())
    ->getQuery()
    ->getSingleResult()
;
Run Code Online (Sandbox Code Playgroud)

我现在如何选择随机产品?另外:是否有可能通过关系来解决这个问题?

我在实体"类别"和"产品"之间有一个OneToMany关系,所以我也可以通过category-> getProducts()得到所有产品......

任何帮助都非常有用,谢谢

Pie*_*eau 12

首先必须计算产品总数,然后生成随机偏移量以选择随机产品.

这应该让你开始:

$count = $this->createQueryBuilder('u')
             ->select('COUNT(u)')
             ->getQuery()
             ->getSingleScalarResult();
Run Code Online (Sandbox Code Playgroud)

然后,您可以在1和行总数之间生成一个随机数.

return $this->createQueryBuilder('u')
    ->where('u.category = :category')
    ->setFirstResult(rand(0, $count - 1))
    ->setMaxResults(1)
    ->setParameter('category', $category->getId())
    ->getQuery()
    ->getSingleResult()
;
Run Code Online (Sandbox Code Playgroud)

这意味着:

SELECT * FROM products WHERE category_id = ? LIMIT 1, {random offset}
Run Code Online (Sandbox Code Playgroud)