2012-08-14 2 views
4

У меня есть запрос Doctrine в моей модели, скажем Model_1Table.class.php, который оставил соединение с Model_2. Model_2 относится к Model_1 по отношению ко многим-к-одному. (Это на самом деле отношение один к одному, а не многие-к-одному, но схема получила разработан таким образом)Doctrine pain при доступе к членам левого объединения, которые являются нулевыми

Мой запрос:

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

журналы Inspecting SF Debugger, он извлекает информацию как и следовало ожидать, сохранение всех табличных записей из Model_1, которые удовлетворяют условию where и сохраняют все значения Model_2 вместе с нулевыми значениями для тех, которые не существуют.

Боль начинается, когда я хочу получить доступ к этой информации и условно отображать информацию в зависимости от наличия/отсутствия записей 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 ; ?> 

Теперь на этой основе она должна реально работать, но я думаю, что происходит в том, что для нулевых значений MODEL2 это не удается. как я могу это сделать, потому что, если я удаляю инструкции if-else в вышеприведенной записи и просто получаю доступ к коллекции Model2Record с циклом foreach, извлекаются доступные строки в Model2Record, но, в конце концов, он не имеет доступа к нулевым значениям , По сути, информация, которую я получаю от этого, - это то, что я обычно получаю от внутреннего соединения.

Чтобы задать вопрос, как мне получить доступ к записям Model1, которые имеют записи Model2 как нулевые значения?

ответ

3

Не уверен, что возвращение по умолчанию для нулевого отношения между MODEL1 и MODEL2 через доктрину, но, очевидно, это не возвращает ложное, в противном случае вы будете ударять состояние еще, попробуйте «InstanceOf» вместо этого, например:

<?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_Col вы можете быть в состоянии:

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

     if($Model1Record->getModel2()->count() > 0) : 
+0

его возвращение в сборник доктрины; поэтому условие else никогда не выполнялось; поэтому для тех, у кого есть нулевые значения, визуализируются пустые коллекции ... – user1020069

+0

instanceof Model2 не удастся, потому что это отношение «один ко многим» и возвращает коллекцию записей. – user1020069

+0

. Через несколько дней ... вы получили это Работа? –

Смежные вопросы