我的自定义存储库存在问题。
我有3个实体:Client,Campaign和CampaignClient。
我想让所有在(此)广告系列中不的客户。 我的实体很简单。 客户 - > OneMany< - CampaignCLient, 广告系列 - > OneMany< - CampaingClient
我的查询(我觉得我的查询错了,但我不知道为什么?):
->createQuery('SELECT c FROM MainBundle:Client c '
. 'LEFT JOIN MainBundle:CampaignClient cc WITH (cc.client = c.id)'
. 'WHERE cc.campaign != :id ')
->setParameter(':id', $id)
我的客户实体:
/**
* @ORM\Column(name="id", type="string", length=255)
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="CampaignClient", mappedBy="client", cascade={"all"})
*/
private $campaigns;
我的广告系列实体:
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="CampaignClient", mappedBy="campaign", cascade={"all"})
*/
private $clients;
我的CampaignClient实体:
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="campaigns")
*/
private $client;
/**
* @ORM\ManyToOne(targetEntity="Campaign", inversedBy="clients")
*/
private $campaign;
编辑:我使用MySql
我试着用代码问我的sql:
SELECT * FROM client c
LEFT JOIN campaignclient cc ON c.id = cc.client_id
WHERE cc.campaign_id = 1
GROUP BY c.id;
没关系但是如果我将where clausule更改为cc.campaign_id = NULL或cc.camaign_id!= 1则返回0条记录。
答案 0 :(得分:0)
SELECT c FROM MainBundle:Client c LEFT JOIN MainBundle:CampaignClient cc WITH (cc.client = c.id)
WHERE cc.campaign != :id
尝试用ON替换WITH(...)......所以它看起来像这样:
SELECT c FROM MainBundle:Client c LEFT JOIN MainBundle:CampaignClient cc ON cc.client = c.id
WHERE cc.campaign != :id