Symfony1 访问左联接中为null的成员时出错

Symfony1 访问左联接中为null的成员时出错,symfony1,symfony-1.4,doctrine-1.2,doctrine-query,Symfony1,Symfony 1.4,Doctrine 1.2,Doctrine Query,我的模型中有一个条令查询,比如model1table.class.php,它与model2保持连接。模型2在多对一关系上与模型1相关。(它实际上是一对一的关系,不是多对一的关系,但模式是这样设计的) 我的问题是: $this->select('m1.*, m2.primaryKeyOfModel2')->leftJoin('m1.model2 m2')->where('m1.record = ?', some_value); 通过检查SF调试器日志,它将按其应该的方式检索信息

我的模型中有一个条令查询,比如model1table.class.php,它与model2保持连接。模型2在多对一关系上与模型1相关。(它实际上是一对一的关系,不是多对一的关系,但模式是这样设计的)

我的问题是:

$this->select('m1.*, m2.primaryKeyOfModel2')->leftJoin('m1.model2 m2')->where('m1.record = ?', some_value);
通过检查SF调试器日志,它将按其应该的方式检索信息,保留模型_1中满足where子句的所有表记录,并保留模型_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的null值,它失败了。我如何推断,因为如果我删除上述记录中的if-else语句,并使用foreach循环简单地访问Model2Record集合,Model2Record中的可用行将被检索,但它当然不会访问null值。本质上,我从中获得的信息是我通常从内部联接中获得的信息


要提出一个问题,我如何访问Model1中Model2记录为空值的记录

不确定model1和model2之间的空关系通过条令的默认返回值是多少,但显然它不会返回false,否则您将遇到else条件,请尝试使用'instanceof',例如:

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

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

如果(isset($model1['Model2']):
--更新--

如果它返回一个Doctrine_集合实例,您应该能够执行以下操作:

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

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

返回一个条令集合;这就是为什么else条件从未执行;因此,对于那些具有空值的集合,将呈现空集合…Model2的instanceof将失败,因为它是一对多关系,并且它返回一个记录集合+1
$collection->count()
(或
count($collection)
)应该可以工作-问题是空集合仍然是一个对象,因此,强制转换为布尔值将导致
true
,而强制转换为布尔值的数组将导致
false
<?php foreach($Model1Records as $Model1Record) :

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