我试图用doctrine创建一个select查询,但它没有用。 我有三个表,产品(ID,名称),客户(ID,名称),订单(产品,客户)。 我需要选择并显示客户所做的所有订单,以及产品名称。 如何使用doctrine进行此特定查询? 对不起,如果这是一个平庸的问题...
货号:
<?php
namespace Example\Bundle\CrudBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Product
*/
class Product
{
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $prize;
/**
* @var integer
*/
private $id;
/**
* Set name
*
* @param string $name
* @return Product
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set prize
*
* @param string $prize
* @return Product
*/
public function setPrize($prize)
{
$this->prize= $prize;
return $this;
}
/**
* Get prize
*
* @return string
*/
public function getprize()
{
return $this->prize;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
客户端:
<?php
namespace Example\Bundle\CrudBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Client
*/
class Client
{
/**
* @var string
*/
private $name;
/**
* @var string
*/
private $age;
/**
* @var integer
*/
private $id;
/**
* Set name
*
* @param string $name
* @return Client
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set age
*
* @param string $age
* @return Client
*/
public function setAge($age)
{
$this->age = $age;
return $this;
}
/**
* Get age
*
* @return string
*/
public function getAge()
{
return $this->age;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
订单:
<?php
namespace Example\Bundle\CrudBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Orders
*/
class Orders
{
/**
* @var integer
*/
private $idProduct;
/**
* @var integer
*/
private $idIngrediente;
/**
* Set idProduct
*
* @param integer $idProduct
* @return Orders
*/
public function setIdProduct($idProduct)
{
$this->idProduct = $idProduct;
return $this;
}
/**
* Get idProduct
*
* @return integer
*/
public function getIdProduct()
{
return $this->idProduct;
}
/**
* Set idClient
*
* @param integer $idClient
* @return Orders
*/
public function setIdClient($idIngrediente)
{
$this->idClient= $idClient;
return $this;
}
/**
* Get idClient
*
* @return integer
*/
public function getIdClient()
{
return $this->idClient;
}
}
这就是我尝试进行查询的方法,首先检查产品是否在表中,然后从Orders和Product表中选择我需要的字段。
class ProductRepository extends EntityRepository
{
public function findAllOrderedByName()
{
return $this->getEntityManager()
->createQuery(
'SELECT * FROM ExampleCrudBundle:Product p ORDER BY p.name ASC'
)
->getResult();
}
}
public function findOneByIdJoinedToCategory($id)
{
$query = $this->getEntityManager()
->createQuery('
SELECT p, c FROM ExampleCrudBundle:Product p
JOIN p.category c
WHERE p.id = :id'
)->setParameter('id', $id);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
答案 0 :(得分:1)
你可能想要使用$ em-&gt; getRepository(“ExampleCrudBundle:Product”) - &gt; createQueryBuilder('p') - &gt; leftJoin(“p.category c”)
你需要阅读更多关于教义的内容,一方面,你不需要为ManyToMany关系定义表,doctrine会为你做这些,另一方面,定义这样的表是不够的,因为你需要表明存在关系的学说:产品 - 类别。
你现在做的是:
“为我提供类别为X的产品”,但您的产品实体中没有关于类别的信息
请阅读http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html关于“ManyToMany”的关系以及关系。
答案 1 :(得分:0)
您是否阅读过文档?
http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html
这是您执行选择查询的方式:
<?php
$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.age > 20');
$users = $query->getResult();