2017-09-13 1 views
0
id name referred_by_id 
1 test1 2 
2 test2 1 
3 test3 1 

referByIDに基づいてreferByNameをputするために新しいカラムを追加します。これはidに等しい。 Symsofnyで私はこれが(同じテーブル)に参加したいと思うSymfonyは同じテーブルに参加してテーブルのエイリアスとして値を取得します

SELECT t1.*, t2.name AS refname 
FROM tbl_students t1 
JOIN tbl_students t2 
    ON t1.referred_by_id = t2.id 
ORDER BY t1.id 

私のクエリ

$repo = $this->getDoctrine()->getRepository('C2EducateToolsBundle:Students'); 
      $leadsData['leads'] = $repo->createQueryBuilder('t') 
          ->select('t.id', 't.name','t.referredByID','t.referredBy') 
          ->where('t.id = :stuID') 
          ->setParameter('stuID', $leadId) 
          ->getQuery()->getResult(); 

のための私は、エンティティ内の任意のassocialtionを変更する必要がありますか。?

私はあなたがエンティティで定義された関連性を持った後、あなたのクエリは、このようなものでなければなりません

/** 
    * @var referredByID 
    * 
    * @ORM\ManyToOne(targetEntity="Students", cascade={"persist", "remove", "merge"}) 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="referred_by_id", referencedColumnName="id") 
    * }) 
    * @Type("C2Educate\ToolsBundle\Entity\Students") 
    */ 
    protected $referredByID; 
+0

も、クエリビルダで別名を与えることができますが。あなたが生徒のオブジェクトを取得したときに、それはまた、学生タイプのオブジェクトを参照しました。 –

+0

私はそれをしました、私は私の質問で同じ更新します。どのように私の教義の質問にそのフィールドを取得することができます。 – Developer

答えて

1

メインエンティティにアソシエーションマッピングがある場合、クエリービルダーで言及する必要はありません。これは、doctrineオブジェクトを取得すると、クエリ更新選択メソッドのような関連オブジェクトのデータが->select('t')

あなたのクエリは、学生のオブジェクトに続いて学生証に対する学生のオブジェクトを返す場合のステートメントの上

$student->getReferredByID()->getName() 

としてマークされている関連した生徒の名前を返しますよう、あなたがそれに関連付けられたオブジェクトのゲッターメソッドを呼び出すことができますこのオブジェクトのために参照される。

また、プライマリキーで検索している場合は、クエリービルダーを使用する代わりにfind()メソッドをリポジトリで使用することもできます。

[はい、あなたが自己参照エンティティとして、あなたの学生のエンティティに(1&多くの1つに、多くの)としてreferredByプロパティを定義する必要が

+0

ありがとう、私の関連付けのマッピングは正しいですか。 ? – Developer

+0

はい、私にはうまく見えますが、名前の表記法は標準ではありません。任意の関連付けを定義するときと同様に、 '$ referencedByID'ではなく' $ referencedBy'のようなリレーション名を定義します。 –

0

ために私のエンティティ

/** 
      * @var integer $referredByID 
      * 
      * @ORM\Column(name="referred_by_id", type="integer", nullable=true) 
      * @Type("integer") 
      */ 
      protected $referredByID; 

を変更:これはあなたを取得する必要があります

$repo->createQueryBuilder('t') 
     ->select('t.id', 't.name','t.referredByID', 'p.name as parent_name') 
     ->join('t.referredByID', 'p') // joining self entity with parent id ref. 
     ->where('t.id = :stuID') 
     ->setParameter('stuID', $leadId) 
     ->getQuery()->getResult(); 

関連する親の名前はparent_nameです。

ただし、クエリは1つのエントリのようであるため、エンティティを読み込んでgetter refを使って親エンティティと名前をロードするのはなぜですか?

+0

このエラーが発生しています。 '[Semantical Error]行0、 'referencedByID'の近くのcol 496:エラー:無効なPathExpressionです。 StateFieldPathExpressionでなければなりません。 – Developer

+0

プロパティNameをチェックするだけです。残りは同じでなければならない。 – Jeet

関連する問題