4

私のモデルには、Model_2 との結合を残した Model_1Table.class.php という Doctrine クエリがあります。Model_2 は、多対 1 の関係で Model_1 に関連付けられています。(これは実際には 1 対 1 の関係であり、多対 1 ではありませんが、スキーマはそのように設計されています)

私のクエリは次のとおりです。

$this->select('m1.*, m2.primaryKeyOfModel2')->leftJoin('m1.model2 m2')->where('m1.record = ?', some_value);

SF Debugger のログを調べて、必要に応じて情報を取得し、Model_1 から where 句を満たすすべてのテーブル レコードを保持し、Model_2 のすべての値と存在しない値の null 値を保持します。

この情報にアクセスし、テーブル内の model_2 レコードの有無に応じて条件付きで情報をレンダリングしたいときに問題が始まります。私はこれが好きです:

<?php foreach($Model1Records as $Model1Record) :
          if($Model1Record->getModel2()) :
              foreach($Model1Record->getModel2() as $Model2Record):
                        //do something 
               end foreach ; 
          else: //basically checking for if(!($Model1Record->getModel2()))
              // do something else
           endif;
    endforeach ; ?>

これに基づいて、実際に機能するはずですが、モデル2のnull値では失敗すると思います。上記のレコードの if-else ステートメントを削除し、単純に foreach ループで Model2Record のコレクションにアクセスすると、Model2Record で使用可能な行が取得されますが、もちろん null 値にはアクセスされません。 . 基本的に、ここから取得する情報は、通常は内部結合から取得するものです。

質問を組み立てるために、Model2 レコードを null 値として持つ Model1 のレコードにアクセスするにはどうすればよいですか?

4

1 に答える 1

3

doctrine を介した model1 と model2 の間の null リレーションのデフォルトの戻り値が何であるかはわかりませんが、明らかに false を返していません。

<?php foreach($Model1Records as $Model1Record) :

      if($Model1Record->getModel2() instanceof Model2) :

Model1 オブジェクトを配列にキャストすることもできます。

<?php foreach($Model1Records as $Model1Record) :

    <?php $model1 = $Model1Record->toArray();  ?>

      if(isset($model1['Model2'])) :

- アップデート -

Doctrine_Collection インスタンスを返す場合、次のことができるはずです:

<?php foreach($Model1Records as $Model1Record) :

      if($Model1Record->getModel2()->count() > 0) :
于 2012-08-18T23:46:58.207 に答える