Per*_*ion 6 php mysql doctrine symfony doctrine-orm
我被困在一个最初非常简单的学说 2 查询中。我有一个名为 Category 的实体,它与自身有一个 OneToMany 关系(对于父类和子类)。
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
private $children;
Run Code Online (Sandbox Code Playgroud)
以下查询
$q = $this->createQueryBuilder('c')
->leftJoin('c.children', 'cc')
->select('c.name as title, cc')
->where('c.parent IS NULL');
Run Code Online (Sandbox Code Playgroud)
因错误而失败
如果不选择至少一个根实体别名,则无法通过标识变量选择实体。
我真的不明白这个问题。如果我省略了该->select部分,则查询确实有效并给出了预期的结果。我已经在论坛上搜索过,但找不到有效的解决方案。有人有建议吗?非常感谢。
您的问题是,您尝试从类别实体中选择一个字段,同时选择已连接类别实体的整个对象。与普通 SQL 不同,使用 QueryBuilder 组件,您不能仅从要加入的表中选择实体。
如果您希望返回带有连接子项的主类别对象,您可以执行->select(array('c', 'cc')),或者干脆完全省略该->select()调用。前者将在单个查询中自动选择您需要的子项。如果您想访问主类别实体上的子实体,则后者将需要另一个 SQL 查询。
如果您出于某种原因想要在对象中name进行选择title,则始终可以向实体添加另一个函数,该函数是用于检索名称的别名,而不必将其写入查询中:
function getTitle()
{
return $this->getName();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7373 次 |
| 最近记录: |