3

Zend 1.11 で Doctrine-2.0.4 を使用しています。Php マッパーとエンティティは、MySQL DB から生成されます。今、私は2つのテーブルを結合して取得するクエリを試しています

[セマンティカル エラー] 行 0、列 48 付近の 'e': エラー: クラス エンティティ\ユーザーには、アカウントという名前の関連付けがありません

クエリ:

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

私のDBには、ユーザー、アカウントの2つのテーブルがあります

  • ユーザーにはフィールド id、accountId があります
  • アカウントにはフィールド id、info があります

Users.accountId には、Accounts.idへの双方向の 1 対 1 の関連付けがあります。

<?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

@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 に答える
4

$accountIdUser エンティティのプロパティ$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 に答える