Doctrine DQL查询 - 在外键为null时获取行

时间:2012-02-22 17:26:06

标签: php doctrine dql

我想知道是否有人可以帮助解决这个问题 基本上,我的查询不返回未设置外键的行或NULL。我想返回所有行。

这是2个架构

class Items{
  /**
   * @var integer $id
   *
   * @Column(name="id", type="integer", nullable=false)
   * @Id
   * @GeneratedValue(strategy="AUTO")
   */
    private $id;
  /**
   * @var string $name
   *
   * @Column(name="name", type="string", length=255, nullable=false)
   */
   private $name;
  /**
   * @var integer $type
   *
   * @ManyToOne(targetEntity="Types")
   *
   */
   private $type;
}

类型

class Types{
  /**
   * @var integer $id
   *
   * @Column(name="id", type="integer", nullable=false)
   * @Id
   * @GeneratedValue(strategy="AUTO")
   */
    private $id;
  /**
   * @var string $name
   *
   * @Column(name="name", type="string", length=255, nullable=false)
   */
   private $name;
}

以下DQL查询

SELECT i.id, i.name, t.name as type FROM entity\Items i, entity\Types t WHERE i.type=t.id (OTHER CONDITIONS...)

上述查询不会返回type外键中没有值的行。

是否可以返回这些行?

提前谢谢你......

3 个答案:

答案 0 :(得分:6)

尝试LEFT JOIN:

SELECT i.id, i.name, t.name as type FROM entity\Items i LEFT JOIN i.type t

无论是否有匹配的类型,都会返回左侧的所有内容(Items)。

答案 1 :(得分:2)

很简单,你使用IS EMPTY

在您的实体中,您已经定义了一个反向键,然后,您调用您的实体主体,其中inverseKey是EMPTY。

SELECT a FROM items a WHERE a.types IS EMPTY;

然后我将字段课程定义为项目中的类型

/**
 * inversed key on principal entity (item)
 * @ORM\OneToMany(targetEntity="entity\types", mappedBy="id")
 */
private $types;

答案 2 :(得分:0)

听起来您不希望在查询中出现这种情况;

i.type=t.id

您是否尝试过移除它或替代某些内容

(i.type=t.id OR i.type IS NULL)