我想知道是否有人可以帮助解决这个问题
基本上,我的查询不返回未设置外键的行或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
外键中没有值的行。
是否可以返回这些行?
提前谢谢你......
答案 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)