参照される要素 B が特別なフィールドに値を持つすべての要素 A を取得する方法を理解しようとします。
次のモデルがあるとしましょう:
Person
id name active companyref
1 Pers1 1 1
1 Pers2 1 2
Company
id name filter
1 Comp1 1
1 Comp2 5
すべてのアクティブな人を取得したいときは、リポジトリで次のことを行います。
function findAllActive() {
$query = $this->createQuery();
return $query->matching(
$query->equals('aktiv', 1)
)->execute();
}
ここで私の質問は、refCompany が filter=5 を取得したすべての人を取得するにはどうすればよいですか?
編集: freshp dont work の回答の後、正確なケースを投稿します。
これはうまくいきます(私は自分でSQLを書きます):
function findAllActiveForPaketstufe($paketstufe) {
$query = $this->createQuery();
$sql="SELECT p . *
FROM `tx_myext_domain_model_person` AS p
INNER JOIN tx_myext_domain_model_firma AS f ON f.uid = p.firma_ref
WHERE paketstufe =3";
return $query->matching(
$query->equals('aktiv', 1)
)->execute();
}
これは機能しません(SQLを半分だけ書きます):
function findAllActiveForPaketstufe($paketstufe) {
$query = $this->createQuery();
$sql="SELECT p . *
FROM `tx_myext_domain_model_person` AS p
INNER JOIN tx_myext_domain_model_firma AS f ON f.uid = p.firma_ref";
return $query->matching(
$query->logicalAnd(
$query->equals('aktiv', 1),
$query->equals('person.firmaref.paketstufe', intval($paketstufe))
)
)->execute();
}
エラーが表示されます: 致命的なエラー: メンバー関数 getParentKeyFieldName() への呼び出し
「person.firmaref.paketstufe」の代わりに、私も試しました:
- firmaref.packetstufe
- p.firmaref.packetstufe
- firma_ref.packetstufe
- 等々
そして、私が本当に欲しいのは次のようなものです(SQLをまったく書く必要はありません):
$query = $this->createQuery();
return $query->matching(
$query->locicalAnd(
$query->equals('companyref.filter', 5),
$query->equals('active', 1)
)
)->execute();
どうすればこれを機能させることができますか?