存在检查后的Laravel雄辩sql语句限制为1

存在检查后的Laravel雄辩sql语句限制为1,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我在当前的Laravel4.2补丁中发现了一个非常奇怪的行为。直到现在,每当我想从我的雄辩模型中获取一些数据时,我都会在通过以下代码示例获取结果之前检查结果是否可用: $foo = $model->hasManyRelationFunction(); if($foo->exists()) foreach($foo->get() as $elem) .... 这将导致以下sql语句: select count(*) as aggregate from "vend

我在当前的Laravel4.2补丁中发现了一个非常奇怪的行为。直到现在,每当我想从我的雄辩模型中获取一些数据时,我都会在通过以下代码示例获取结果之前检查结果是否可用:

$foo = $model->hasManyRelationFunction();
if($foo->exists())
  foreach($foo->get() as $elem) 
     ....
这将导致以下sql语句:

select count(*) as aggregate from "vendor_tabs" where "vendor_tabs"."vendor_id" = '80' limit 1 <-- exist() ?
但只有当我进行if$foo->exists检查时。我一评论出存在的条件,一切都很好。他们有关于这种行为的信息吗?还是我很愚蠢D

编辑:似乎他们让能言善辩的构建者在补丁4.2.13中更加流畅。我仍然不知道这是一个bug还是一个特性,我认为这不应该是正常的行为

/**
 * Determine if any rows exist for the current query.
 *
 * @return bool
 */


public function exists()
    {
        $limit = $this->limit;

        $result = $this->limit(1)->count() > 0;

        $this->limit($limit);

        return $result;
    }

事实上,你不需要检查存在。您只应执行以下操作:

foreach ($model->hasManyRelationFunction as $elem) {
  // do whathever you want
}

这就足够获取数据了。你不需要在这里检查存在性,或者如果你认为你需要,你应该展示一个你试图实现的代码的真实示例。

这是真的,但并不能真正回答为什么OPs代码不能正常工作的问题……那么,在这种情况下,我可以在不检查存在性的情况下迭代结果集。但是,想象一下,如果您想在访问整个结果集之前获得第一行的特定属性,那么如果您不检查是否存在,您将得到一个尝试访问非对象eception属性的结果。此外,纯粹的存在性检查本身不应该影响sql语句。这与直觉编程相反我只是在看这个。。。我相信极限法有一个缺陷。如果发送的限制大于0,则限制方法仅设置$this->limit。其中0和null都不是。
foreach ($model->hasManyRelationFunction as $elem) {
  // do whathever you want
}