Symfony 2,SQL ManyToMany得到没有关系的客户端

时间:2015-03-19 09:23:30

标签: sql symfony repository

我的自定义存储库存在问题。

我有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条记录。

1 个答案:

答案 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