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)