2011-04-17 2 views
3

Я использую Doctrine-2.0.4 с Zend 1.11. Php Mappers и Entities генерируются из базы данных MySQL. Теперь я пытаюсь запрос, который соединяет две таблицы и только когда-нибудьdoctrine 2 объединений не найдено

[Семантическая Error] строка 0, столбец 48 вблизи «е»: Ошибка: не Объекты класса \ Users имеет никакой связи с именем Accounts

запроса :

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

В моей БД есть две таблицы: пользователей, учетные записи

  • пользователей га s поля идентификатор, ACCOUNTID
  • счетов имеет поля ID, информация

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

Вы должны изменить $accountId на объекте пользователя до $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(); 
4

Вы не можете использовать как @Column и @JoinColumn.

Вы должны удалить @Column линии, и она должна быть работой !:

/** 
    * @var Accounts $accounts 
    * 
    * @OneToOne(targetEntity="Accounts", inversedBy="id") 
    * @JoinColumn(name="accounts_id", referencedColumnName="id") 
    */ 
private $accounts; 
+1

Пар часов отладки и пару секунд, чтобы найти этот ответ. 10nx –