2016-07-07 6 views
0

FindByを使用してManyToOne関係に関連付けられたデータをフィルタリングできますか?例えば ...FindToを使用してManyToOne関係でアソシエートされたデータをフィルタリングできますか?

カーエンティティ:コントローラで

/** 
* @var string 
* @ORM\ManyToOne(targetEntity="Klient", inversedBy="nip") 
* @ORM\JoinColumn(name="fk_klient", referencedColumnName="nip") 
*/ 
private $fkKlient; 

処置:

$userKlientNip = '22222222'; 
    $cars = $this->getDoctrine()->getRepository('AdminBundle:Car')->findBy([ 
     // 'fkKlient.nip' => $userKlientNip 
     //... 
    ]); 

私は空の配列でFindByを実行した場合、私の小枝ダンプは次のようになります:

enter image description here

Basicaly私は(この例では)fkKlient.nipの== 22222222を持つ唯一の車を取得したい

+0

私はQueryBuilderはあなたが望むものを達成するための良い方法だと思います。http: //doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/query-builder.html –

答えて

0

この戻りどういう:

$userKlientNip = '22222222'; 
$cars = $this->getDoctrine()->getRepository('AdminBundle:Car')->findBy(
    array('fkKlient.nip' => $userKlientNip), 
); 

私はあなたのかどうか分かりませんエンティティ、私はこれが答えであるかどうかは分かりません。それを試してみてください。

+0

戻り値: Unrecogniz edフィールド:fkKlient.nip 500内部サーバーエラー - ORMException – DevWL

0

私はそれが「できない」と確信していました...しかし、細かくそれを働かせました... 基本的に 'fkKlient.nip'はキーではありませんが実際のキーを参照して$ userKlientNipと比較してください。(例1)私が探していたことを魔法のように行います。 また、値を連想配列として定義でき、同じ結果が得られます(例2)。

例1 - コントローラでのアクション:

$userKlientNip = '22222222'; 
    $cars = $this->getDoctrine()->getRepository('AdminBundle:Car')->findBy([ 
     'fkKlient' => $userKlientNip 
    ]); 

例2 - コントローラでのアクション:

$userKlientNip = '22222222'; 
    $cars = $this->getDoctrine()->getRepository('AdminBundle:Car')->findBy([ 
     'fkKlient' => ['nip' => $userKlientNip] 
    ]); 
関連する問題