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

时间:2013-05-18 15:37:50

标签: php symfony doctrine entity relationships

我有以下数据库方案:

table 'products'
id
category_id

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

数据看起来像这样:

Products
--------------------
| id | category_id |
--------------------
| 0  | 1           |
| 1  | 1           |
| 2  | 1           |
| 3  | 2           |
| 4  | 2           |
| 5  | 1           |
--------------------

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

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

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

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

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

2 个答案:

答案 0 :(得分:12)

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

这应该让你开始:

$count = $this->createQueryBuilder('u')
             ->select('COUNT(u)')
             ->getQuery()
             ->getSingleScalarResult();

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

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

转换为:

SELECT * FROM products WHERE category_id = ? LIMIT 1, {random offset}

答案 1 :(得分:0)

使用此辅助功能:

                            using (WebClient client = new WebClient())
                        {
                            var data = new NameValueCollection();
                            data.Add("userid", userid.ToString());
                            data.Add("password", password);

                            byte[] response = client.UploadValues(Url, data);
                            string rep = client.DownloadString("http://xxxx.fr/CreateProfile.php");
                            Toast.MakeText(this, rep, ToastLength.Short).Show();
                        }

使用示例:

if ($data === "404"){
    echo "Student doesn't exist";
    }

else{
$checkIfExist= "SELECT name FROM users WHERE id = $user_id";
    if($result = $conn->query($checkIfExist)) {
        $row_cnt = $result->num_rows;
              } 

    if ($row_cnt > 0){
        echo "User already exist.";
    }

    else{
        echo"New user";
    }