Doctrine orm 一对多、单向连接表的原则Dql
所以我读了以下内容 我对我自己的实体做了类似的事情,并试图创建一个DQL DQL: 但我收到以下错误:Doctrine orm 一对多、单向连接表的原则Dql,doctrine-orm,Doctrine Orm,所以我读了以下内容 我对我自己的实体做了类似的事情,并试图创建一个DQL DQL: 但我收到以下错误: [Semantical Error] line 0, col 152 near 'tt ': Error: Class Crm\ClientBundle\Entity\TreatmentType has no association named treatment_type_id 但是,如果我删除第二个连接并检查symfony profiler,它将创建以下查询,在我看来,该查询似乎已正确
[Semantical Error] line 0, col 152 near 'tt
': Error: Class Crm\ClientBundle\Entity\TreatmentType has no association named
treatment_type_id
但是,如果我删除第二个连接并检查symfony profiler,它将创建以下查询,在我看来,该查询似乎已正确创建实体:
SELECT
s0_.id AS id0,
s0_.client_id AS client_id1,
s0_.date AS date2,
s0_.session_id AS session_id3,
s0_.session_type AS session_type4,
s0_.session_cost AS session_cost5,
s0_.products_bought AS products_bought6,
s0_.products_cost AS products_cost7,
s0_.total_cost AS total_cost8,
s0_.total_paid AS total_paid9,
s0_.notes AS notes10,
t1_.id AS id11,
t1_.type AS type12,
t1_.cost AS cost13,
t1_.category_id AS category_id14
FROM
sessions s0_
INNER JOIN session_treatments s2_ ON s0_.id = s2_.session_id
INNER JOIN treatment_types t1_ ON t1_.id = s2_.treatment_type_id
WHERE
s0_.client_id = 1
Crm\ClientBundle\Session.php:
/**
* @ORM\Entity
* @ORM\Table(name="sessions")
*/
class Session {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORM\Column(type="integer") */
private $client_id;
/** @ORM\Column(type="date") */
private $date;
/**
* **
* @ORM\ManyToMany(targetEntity="TreatmentType")
* @ORM\JoinTable(name="session_treatments",
* joinColumns={@ORM\JoinColumn(name="session_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="treatment_type_id", referencedColumnName="id ", unique=true)}
* )
*/
private $session_treatments;
/**
* Constructor
*/
public function __construct()
{
$this->session_treatments = new ArrayCollection();
}
}
Crm\ClientBundle\TreatmentType.php:
/**
* @ORM\Entity
* @ORM\Table(name="treatment_types")
*/
class TreatmentType {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORM\Column(type="string", length=255) */
private $type;
/** @ORM\Column(type="decimal") */
private $cost;
}
您有2个实体,正在尝试检索3个实体。第二个连接是不必要的。仅当TreatmentType还有另一个关系(与会话的关系除外)时才需要它。请澄清:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT s,st,tt
FROM CrmClientBundle:Session s // <-- s is your Session
INNER JOIN s.session_treatments st // <-- st is your TreatmentType
INNER JOIN st.treatment_type_id tt <-- TreatmentType does not have a property $treatement_type_id that points to non-defined relationship. tt would be your 3rd entity.
WHERE s.client_id = ?1'
);
$query->setParameter(1, $id);
$sessions = $query->getResult();
$em=$this->getDoctrine()->getManager();
$query=$em->createQuery(
'选择s、st、tt
来自CrmClientBundle:Session s//我怀疑这是问题所在,但是referencedColumnName=“id”
-多余的空间不应该存在。是的,这是粘贴中的一个输入错误..我的原始代码中有它。
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT s,st,tt
FROM CrmClientBundle:Session s // <-- s is your Session
INNER JOIN s.session_treatments st // <-- st is your TreatmentType
INNER JOIN st.treatment_type_id tt <-- TreatmentType does not have a property $treatement_type_id that points to non-defined relationship. tt would be your 3rd entity.
WHERE s.client_id = ?1'
);
$query->setParameter(1, $id);
$sessions = $query->getResult();