0

参照される要素 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();

どうすればこれを機能させることができますか?

4

1 に答える 1

1

次のようにできます。

function findAllActive() {
 $query = $this->createQuery();
 return $query->matching(
      $query->locicalAnd(
            $query->equals('companyref.filter', 5),
            $query->equals('active', 1)
      )
 )->execute();
}
于 2013-09-03T06:36:30.870 に答える