3

我将 Doctrine-2.0.4 与 Zend 1.11 一起使用。Php 映射器和实体是从 MySQL 数据库生成的。现在我正在尝试一个连接两个表的查询,并且只得到

[语义错误] 第 0 行,'e' 附近的第 48 列:错误:类实体\用户没有名为 Accounts 的关联

询问:

$query = $em->createQueryBuilder()
    ->select('u')
    ->from('\Entities\Users', 'u')
    ->leftJoin('u.Accounts', 'a')
    ->getQuery();
$info = $query->getResult();

在我的数据库中有两个表:用户,帐户

  • 用户有字段 id, accountId
  • Accounts 有字段 id, info

Users.accountId 与Accounts.id具有双向一对一关联

<?php
namespace Entities;
/**
 * Users
 *
 * @Table(name="users")
 * @Entity
 */
class Users
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;
   /**
     * @var integer $accountid
     *
     * @Column(name="accountId", type="integer", nullable=false)
     * @OneToOne(targetEntity="accounts", inversedBy="id")
     * @JoinColumn(name="accounts_id", referencedColumnName="id")
     */
    private $accountid;
...
}
<?php
namespace Entities;
/**
 * Accounts
 *
 * @Table(name="accounts")
 * @Entity
 */
class Accounts
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     * @OneToOne(targetEntity="users", mappedBy="accountid")
     */
    private $id;
...
}
4

2 回答 2

4

您应该$accountId将 User 实体上的属性更改为,$accounts因为它不是整数而是Accounts实体:

/**
  * @var Accounts $accounts
  *
  * @Column(name="accountId", type="integer", nullable=false)
  * @OneToOne(targetEntity="Accounts", inversedBy="id")
  * @JoinColumn(name="accounts_id", referencedColumnName="id")
  */
private $accounts;

您当前的查询不起作用,因为没有 Accounts 属性。如果您进行上述更改,则以下内容应该有效:

$query = $em->createQueryBuilder()
    ->select('u')
    ->from('\Entities\Users', 'u')
    ->leftJoin('u.accounts', 'a')
    ->getQuery();
$info = $query->getResult();
于 2011-04-17T19:46:44.280 回答
4

您不能同时使用@Column@JoinColumn

您应该删除该@Column行,它应该可以工作!:

/**
  * @var Accounts $accounts
  *
  * @OneToOne(targetEntity="Accounts", inversedBy="id")
  * @JoinColumn(name="accounts_id", referencedColumnName="id")
  */
private $accounts;
于 2014-04-04T13:07:22.963 回答