foreach循环与emply项目Laravel

时间:2017-09-27 19:13:32

标签: laravel foreach

这是我的循环:

 $azienda = Azienda::where('id', $id_a)->get();
        foreach($azienda as $az){
            $id_azienda = $az->id; //code } 

$ azienda有空项目,这会停止循环......

如何继续循环并跳过空项?

dd($aziendas->toArray());

    array:1 [▼
  0 => array:16 [▼
    "id" => 1
    "titolo" => "Studio Rossi"
    "categoria" => 1
    "logo" => "logonull.png"
    "descrizione" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent pharetra,  n ▶"
    "indirizzo" => "via larga 1"
    "provincia_id" => 2
    "comune" => "Roma"
    "telefono" => "06 555444"
    "mobile" => "333 456789"
    "sitoweb" => "www.ldoksid.it"
    "email" => "ls*****@gmail.com"
    "remember_token" => null
    "created_at" => null
    "updated_at" => "2017-09-27 16:13:57"
    "approved" => 0]]

3 个答案:

答案 0 :(得分:1)

我假设当你说has empty items时你的意思是模型实际上是空的 - 没有用数据库中的记录补充水分 - 在这种情况下你可以过滤记录只能获得那些实际含水的记录模型:

$aziendas = Azienda::where('id', $id_a)->get();

$aziendas->filter(function(Azienda $azienda) {
    return $azienda->exists;
});

如果集合中每个模型的实例上的某些属性可能是空的 - 只需替换闭包中的逻辑即可。

$aziendas = Azienda::where('id', $id_a)->get();

$aziendas->filter(function(Azienda $azienda) {
    return !empty($azienda->name);
});

或者如果它的关系可能没有任何相关记录,即Post没有任何Comment,那么您可以将其检查为:

$aziendas = Azienda::with('comments')->where('id', $id_a)->get();

$aziendas->filter(function(Azienda $azienda) {
    return $azienda->comments->count() > 0;
});

请注意我Eager loaded comments使用with('comments')来确保我只向数据库发出2个请求,而不是请求每次迭代。显然,您可能与comments有不同的关系 - 只需将其替换为相关的关系,并从过滤器闭包使用关系方法的名称作为属性来计算关联记录,并仅返回实际具有任何关联记录的关系该关系的相关记录。

您还可以使用whereHas() eloquent方法来仅获取具有特定关系记录的记录 - 这可能是更好的选择:https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence

$aziendas = Azienda::whereHas('comments')->where('id', $id_a)->get();

答案 1 :(得分:0)

快速回答是使用continue。这可以按如下方式完成:

$azienda = Azienda::where('id', $id_a)->get();
        foreach($azienda as $az){
            $id_azienda = $az->id; //code 
            if (is_null($az) { continue; }
        } 

但是,我也建议你利用Laravel的collection methods。有each方法:

$azienda->each(function ($item, $key) {
    // ..
});

答案 2 :(得分:0)

要获取ID,您可以使用pluck方法。

$azienda = Azienda::where('id', $id_a)->get();

$ids = $azienda->pluck('id')->toArray();

更多信息:https://laravel.com/docs/5.5/collections#method-pluck

如果你想要打破一个循环,你可以使用'break'。

foreach ($ids as $id) {
 if($something..) {
    break;
 }
}

更多信息:http://php.net/break