我有一个这样的基表:
class BaseProduct
{
/**
* @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Category", inversedBy="baseProducts")
* @ORM\JoinColumn(name="menu_category_id", referencedColumnName="id", nullable=true)
**/
protected $category;
// ...
和从BaseProduct继承的另一个实体
class ChildProduct extends BaseProduct
{
/**
* @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Category", inversedBy="childProducts")
* @ORM\JoinColumn(name="menu_category_id", referencedColumnName="id", nullable=true)
**/
protected $category;
和类别实体:
class Category
{
/**
* @ORM\OneToMany(targetEntity="ProductBundle\Entity\BaseProduct", mappedBy="category")
* @ORM\OrderBy({"position"= "ASC"})
*/
private $baseProducts;
/**
* @ORM\OneToMany(targetEntity="ProductBundle\Entity\ChildProduct", mappedBy="category")
* @ORM\OrderBy({"position"= "ASC"})
*/
private $childProducts;
我的ChildProduct
表格中有一列名为id
,并引用了BaseProduct
ID' s。现在,我想通过此查询加入带ChildProduct
的类别:
$qb->select('mc', 'cp')
->from('ProductBundle:Category', 'mc')
->leftJoin('mc.childProducts', 'cp')
// .....
当我执行此查询时,它会出现此错误:
SqlWalker.php第922行中的ContextErrorException:
注意:未定义的索引:childProducts
虽然我在类别中有childProducts
。
现在我有两个问题:
答案 0 :(得分:0)
检查学说章节继承映射:Inheritance Mapping
在文档之后尝试这个(我没有测试代码)
/** @ORM\MappedSuperclass */
class BaseProduct
{
/**
* @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Category", inversedBy="baseProducts")
* @ORM\JoinColumn(name="menu_category_id", referencedColumnName="id", nullable=true)
**/
protected $category;
现在,Doctrine知道你的类是其他人的基类。
您只需要扩展基类并添加注释@ORM\Entity
/**
* @ORM\Entity()
**/
class ChildProduct extends BaseProduct
{
/**
* @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Category", inversedBy="childProducts")
* @ORM\JoinColumn(name="menu_category_id", referencedColumnName="id", nullable=true)
**/
protected $category;
我认为您可以从ChildProduct $category
字段中删除。它也应该有效。