【问题标题】:Symfony 2, SQL ManyToMany get client without relationsSymfony 2,SQL ManyToMany 获取没有关系的客户端
【发布时间】:2015-03-19 09:23:30
【问题描述】:

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

我有 3 个实体:Client、Campaign 和 CampaignClient。

我希望获得所有不在(此)广告系列中的客户。 我的实体很简单。 客户端 -> OneMany OneMany

我的查询(我觉得我的查询是错误的,但我不知道为什么?):

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

【问题讨论】:

    标签: sql symfony repository


    【解决方案1】:
    SELECT c FROM MainBundle:Client c LEFT JOIN MainBundle:CampaignClient cc WITH (cc.client = c.id)
    WHERE cc.campaign != :id 
    

    尝试将 WITH (...) 替换为 ON ...,如下所示:

    SELECT c FROM MainBundle:Client c LEFT JOIN MainBundle:CampaignClient cc ON cc.client = c.id
        WHERE cc.campaign != :id 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2015-05-19
    • 1970-01-01
    • 2016-08-05
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多