Orm 条令-其中一个协会不能正常运作

Orm 条令-其中一个协会不能正常运作,orm,doctrine-orm,doctrine,Orm,Doctrine Orm,Doctrine,我对条令2中的联想有问题 我有两种相似的联想。一个很好,第二个很奇怪。我稍后再解释 这是我的主要实体-产品: ** * Product * * @ORM\Table(name="product", indexes={ * @ORM\Index(name="category_index", columns={"category_id"}), * @ORM\Index(name="partner_index", columns={"partner_id"}) * })

我对条令2中的联想有问题 我有两种相似的联想。一个很好,第二个很奇怪。我稍后再解释

这是我的主要实体-产品:

**
 * Product
 *
 * @ORM\Table(name="product", indexes={
 *      @ORM\Index(name="category_index", columns={"category_id"}),
 *      @ORM\Index(name="partner_index", columns={"partner_id"})
 * })
 * @ORM\Entity
 */
class Product
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var Category
     *
     * @ORM\ManyToOne(targetEntity="Category")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */
    private $categoryId;

    /**
     * @var Partner
     *
     * @ORM\ManyToOne(targetEntity="Partner")
     * @ORM\JoinColumn(name="partner_id", referencedColumnName="id")
     */

    private $partnerId;
}
类别实体:

/**
 * Category
 *
 * @ORM\Table(name="category")
 * @ORM\Entity
 */
class Category
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="category_name", type="string", length=100, nullable=false)
     */
    private $categoryName;
}
伙伴实体:

/**
 * Partner
 *
 * @ORM\Table(name="partner")
 * @ORM\Entity
 */
class Partner
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=150, nullable=false)
     */
    private $name;
}
如你所见,我有两个相同的关联: 产品类别ID ProductpartnerId

第一个-categoryId可以正常工作,但第二个-partnerId不能:

我注意到的第一件事是Doctrine创建了带有合作伙伴实体的代理类, 虽然类别实体不需要代理类来工作,但是 这不合适。我刚开始学习教义,所以我可能 错

我在Partner表中有4条记录。当我试图修改产品时 手动记录,在partner_id字段中我不能设置1-4,我可以设置 大概是这样的:

(empty)
1 - 1
2 - 2
3 - 3
4 - 4
(empty)
1 - 1
2 - 2
3 - 3
4 - 4
我第一次看到这样的东西

我注意到的最后一件事是:

$query = $em->createQuery('
    SELECT pp.name, p.id
    FROM Application\Entity\Product AS p
    LEFT JOIN Application\Entity\Partner AS pp WITH p.partner_id = pp.id GROUP by p.partner_id
');
$items = $query->getResult();
向我显示错误:

Doctrine\ORM\Query\QueryException: [Semantical Error] line 0, col 148 near 'partner_id =': Error: Class Application\Entity\Product has no field or association named partner_id in
谢谢你的帮助和提示

编辑
所以,问题是。为什么条令为合作伙伴实体创建代理类,而不是类别?据我所知,条令仅在使用其所属实体的功能时才会创建代理

您还可以使用命令行工具手动生成代理

关于错误: 您应该使用partnerId而不是partner\u id。partner\u id是数据库列的名称,而不是产品实体中定义的属性的名称

$query = $em->createQuery('
    SELECT pp.name, p.id
    FROM Application\Entity\Product AS p
    LEFT JOIN Application\Entity\Partner AS pp WITH p.partnerId = pp.id GROUP by p.partnerId
');
$items = $query->getResult();
请仔细阅读DQL文档:

也许它会让您对SQL和DQL之间的区别有更多的了解