检查集合中的值是否为空值

时间:2019-01-24 12:49:29

标签: php laravel laravel-5.7

我有以下型号:

  1. Tour.php [belongsTo('App \ Region'),belongsTo('App \ TourCategory')]
  2. Region.php [hasMany('App \ Tour');]
  3. TourCategory.php [hasMany('App \ Tour','category_id');]

    执行以下任务的代码段:

  4. 以一种偶然的方式找到旅游类别

  5. 获取具有特定类别的旅游
  6. 从这些旅行中获取所有唯一的地区名称

      public function fetchByCategory($slug)
      {
       $category = TourCategory::where('slug','=', $slug)->first();
       $tours = $category->tours()->with('region')->get(['region_id']);
       $regions = $tours->pluck('region')->unique();
    
       return view('frontend.pages.travel-style')
       ->withResults($regions)
       ->withCategory($category);
      }
    

但是我创建的某些游览没有区域。在没有区域存储的情况下,默认情况下会设置空值。

这导致我的应用崩溃,因为我以下列方式在视图中打印数据:

@foreach($results as $region)
    <div class="uk-width-1-2@s">
        <a href="{{ route('region2package',[$category->slug,$region->slug]) }}">
         <div class="uk-height-medium uk-flex uk-flex-center uk-flex-middle uk-background-cover uk-light" data-src="{{ asset($region->thumb) }}" uk-img>
        </a>
            <h3><a href="{{ route('region2package',[$category->slug,$region->slug]) }}">{{ $region->name }}</a></h3>
        </div>
    </div>
@endforeach
  1. 当我使用上述方法转储dd($tours->count());并使其死亡时,当DB中仅保存了一个没有区域的游览时,它将返回1
  2. 我做dd($regions);时会给出以下信息:

    Collection {#570 ▼
     #items: array:1 [▼
     0 => null
      ]
     }
    

如果有人能提出检查集合中项目是否包含空值的最佳方法,我将非常感谢!

2 个答案:

答案 0 :(得分:1)

我建议您在has关系上使用tours方法,只获得region exists处的结果,如下所示:

$tours = $category->tours()->has('region')->with('region')->get(['region_id']);

答案 1 :(得分:0)

可以从集合中查找空值,而不是从集合中查找空值。

$regions = $tours->pluck('region')->unique()->filter();