Symfony 条令查询崩溃

Symfony 条令查询崩溃,symfony,doctrine-orm,Symfony,Doctrine Orm,非常非常奇怪。我已经用过几百次了。我有一个简单的控制器,它以id作为参数。条令所产生的质疑是错误的和崩溃的 /** * @Security("has_role('ROLE_ADMIN')") * @return Response */ public function editSellerAction($id) { $em = $this->getDoctrine()->getManager(); $seller = $em->getRepository(

非常非常奇怪。我已经用过几百次了。我有一个简单的控制器,它以id作为参数。条令所产生的质疑是错误的和崩溃的

/**
 * @Security("has_role('ROLE_ADMIN')")
 * @return Response
 */
public function editSellerAction($id)
{
    $em  = $this->getDoctrine()->getManager();
    $seller = $em->getRepository('SiteUserBundle:Seller')->find($id);

    // ...
    $form = $this->createForm(new SellerType(), $seller, array(
        'method' => 'POST'
    ));
    // ...
}
生成的查询如下所示

[2/2]DBAlexException:从卖方t1执行“选择t1.id作为id2,选择t1.username作为username3,选择t1.password作为password4,选择t1.firstname作为firstname5,选择t1.lastname作为lastname6”时发生异常,其中t0.id=?带参数[2]的限制1':

SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“t0.id”+

抛出的错误是有意义的,因为它正在查看WHERE t0.id,而它应该查看WHERE t1.id。我使用phpmyadmin尝试了t1查询,结果很好

知道是什么导致了这个问题吗

/**
 * Seller have access to their customer and are able to RW access to the customers
 *
 * @ORM\Table("seller")
 * @ORM\Entity
 * @author Michael Villeneuve
 */
class Seller extends User
{

    /**
     * @var array
     * 
     * @ORM\OneToMany(targetEntity="Customer", mappedBy="seller", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="seller_id", referencedColumnName="id")
     **/
    protected $customers; 

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

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

    // Other attributes and only getters/setter


/**
 *
 * @ORM\Entity
 */
class User implements UserInterface
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255, unique=true)
     */
    private $username;

    /**
     * @ORM\Column(type="string", length=64)
     */
    private $password;
我有3个实体扩展了用户customer、admin和seller

更新链接:

请阅读有关映射的超类的一些信息:。基本上,抽象基本用户类本身不能是实体

因此,从用户类中去掉@ORM\Entity行。这就是表0 t0的来源。

尝试将id字段添加到卖方实体,而不是用户

/**
 * Seller have access to their customer and are able to RW access to the customers
 *
 * @ORM\Table("seller")
 * @ORM\Entity
 */
class Seller extends User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var array
     * 
     * @ORM\OneToMany(targetEntity="Customer", mappedBy="seller", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="seller_id", referencedColumnName="id")
     **/
    protected $customers; 

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

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

    // Other attributes and only getters/setter


/**
 *
 * @ORM\Entity
 * @author Michael Villeneuve<michael@panierdachat.com>
 */
class User implements UserInterface
{

    /**
     * @ORM\Column(type="string", length=255, unique=true)
     */
    private $username;

    /**
     * @ORM\Column(type="string", length=64)
     */
    private $password;
您有两种选择: 第一个是创建一个抽象用户实体并从中继承所有值。如果您有许多具有相同行为的实体,这将非常有用。例如,希望创建一个带有ID字段和一些基本方法的BaseEntity。所有实体都可以扩展该实体并自动拥有ID。Cerad解释了如何实现这一点。 第二个选项称为鉴别器字段。基本上,它们允许您为每个扩展实体拥有一个用户表和子表。你可以在报纸上读到他们。
您最终使用哪一个可能取决于大小写。

您可以添加您所指的实体吗?@byf ferdy我可以,但它有100行长+它扩展了我的用户,这是另外100行。实体中是否有您希望看到的特定内容?如果id不常见,那么它会很有趣。除此之外,您是否尝试过清除缓存?我想不出更多了。扩展我的用户是指您在数据库级别上有关系吗?这两个实体是如何在mysql级别上表示的呢?好吧,现在您已经谈到了它,这是我第一次扩展一个条令实体。所以这可能就是我有问题的原因。给我一分钟,我会发布它的外观。这不应该是解决方案。您可以扩展实体及其字段,但id不会继承2个实体的问题,因为DBAL仍然是持久的。这应该是我问题的解决方案。请在这里登记。。“链接好像死了@Cerad.@JamshadAhmad并不惊讶。最新的文件现在指向了理论3.0,这是一个完整的和未发布的本次写作重写。我想这是链接唯一的答案不受欢迎的一个原因。但在这种情况下,我提供了实际的解决方案。