学说多对多 - 产品和类别

时间:2016-01-26 05:22:23

标签: php zend-framework doctrine-orm

如何构建搜索查询以使用类别搜索产品?以下是我的类别和产品。

这是我的产品实体

class Category {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer", nullable=false)
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;
    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    protected $title;

    /**
     * @ORM\ManyToOne(targetEntity="Catalog\Model\Entity\Product", inversedBy="categories")
     */
    /**
     * @var \Doctrine\Common\Collections\Collection|Product[]
     *
     * @ORM\ManyToMany(targetEntity="Catalog\Model\Entity\Product", mappedBy="categories")
     */
    protected $products;
} 

这是类别实体..

    $productName = $searchParams['productName'];

    $arrWhere = array();
    $productSql = "SELECT p FROM \Catalog\Model\Entity\Product p";

    if ($productName) {
        array_push($arrWhere, "p.name LIKE '" . '%'.$productName.'%' . "'");
    }


    if (count($arrWhere) > 0) {
        $productSql.= " WHERE " . implode(' AND ',$arrWhere);
    }

    $productSql.= $order_query_str;

    $query = $em->createQuery($productSql);

我正在尝试构建搜索查询。我应该如何修改以下查询以使用类别进行搜索?

<activity  android:name=".MainActivity">
   <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
</activity>

1 个答案:

答案 0 :(得分:0)

我建议使用Doctrine的查询构建器。

$qb = $em->createQueryBuilder();
$qb->select(‘p’)
    -> from('\Catalog\Model\Entity\Product')
    ->leftJoin('p.categories', 'c');


if (isset($searchParams['productName'])) {
    $qb->andWhere('p.name LIKE :prodName')
        ->setParameter('prodName', '%' . $searchParams['productName'] . '%');
}
if (isset($searchParams['categoryTitle'])) {
    $qb->andWhere('c.title LIKE :catTitle')
        ->setParameter('catTitle', '%' . $searchParams['categoryTitle'] . '%');
}

$query = $qb->getQuery();