2016-12-12 6 views
0

私はUserRepositoryからこのエラーを得た:ドクトリン/ dflydev - OneToMany関連したID

[Semantical Error] line 0, col 51 near 'h': Error: Class DokMngr\Entity\User has no association named id

が、私はエラーが私のユーザエンティティの内部行方不明宣言から来ることを理解しています。フィールドが生成されたIDとOneToManyの両方の関連である場合、正しい構文を見つけることができません。

誰かが私の問題を解決するのを助けることができますか、少なくともなぜ私が関連としてIDを使用することができないかを説明することができます。

class UserRepository extends EntityRepository 
{ 
    public function findAllwithHistoryCount() { 
     $qb = $this->createQueryBuilder('u') 
      ->leftJoin('u.id', 'h'); 
     return $qb->getQuery()->getResult(); 
    } 
} 

/** 
* @Entity(repositoryClass="DokMngr\Repository\UserRepository") 
* @Table(name="users") 
*/ 
class User implements UserInterface 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    */ 
    protected $id; 
} 

/** 
* @Entity(repositoryClass="DokMngr\Repository\HistoryRepository") 
* @Table(name="history") 
*/ 
class History 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    */ 
    protected $id; 

    /** 
    * @ManyToOne(targetEntity="User", inversedBy="id") 
    * @JoinColumn(name="user", referencedColumnName="id") 
    */ 
    protected $user; 
} 
+0

だからここに修正実体だ(これは正確にデータベース内に存在しません)あなたのユーザーには「履歴」を表示しますが、ManyToOneは単方向であるため、ユーザーは「履歴」についてはわかりません。 Userエンティティでは、履歴への参照はありません。あなたはどんな結果を期待していますか? – olibiaz

+0

@olibiazテーブルに参加してすべての列を表示するための最初の。 'User.id'と' History.user'の間にこの欠落した参照をどのようにして作成しますか? '@OneToMany(targetEntity =" History "、mappedBy =" user ")'私のid宣言の上には無視されます。 – Drakano

+0

ユーザーエンティティから履歴を参照する場合は、双方向関係を使用する必要があります。http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html# 1対多の双方向 – olibiaz

答えて

0

私は推論でエラーが発生しました。 私はいつもデータベース内のようにUser.idHistory.userの間の関連を作らなければならないと思っていました。 代わりに、Userエンティティに新しいフィールドhistoriesを作成する必要があります。

ユーザー

use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @Entity(repositoryClass="DokMngr\Repository\UserRepository") 
* @Table(name="users") 
*/ 
class User implements UserInterface 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    */ 
    protected $id; 

    /** 
    * @OneToMany(targetEntity="History", mappedBy="user") 
    */ 
    private $histories; 
} 

歴史あなたは `いくつかに参加しようとしているように思え

/** 
* @Entity(repositoryClass="DokMngr\Repository\HistoryRepository") 
* @Table(name="history") 
*/ 
class History 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    */ 
    protected $id; 

    /** 
    * @ManyToOne(targetEntity="User", inversedBy="histories") 
    * @JoinColumn(name="user", referencedColumnName="id") 
    */ 
    protected $user; 
} 
関連する問題