集合中的Laravel eloquent ignore字段(如果为空)

集合中的Laravel eloquent ignore字段(如果为空),laravel,laravel-5,eloquent,laravel-5.4,laravel-eloquent,Laravel,Laravel 5,Eloquent,Laravel 5.4,Laravel Eloquent,因此,我与多个表有关系: $business = Business::where('id', $id) ->with('addresses') ->with('location') ->with('gallery') ->get(); 这带来了类似于: [{"id":100,"name":"Live","

因此,我与多个表有关系:

    $business = Business::where('id', $id)
                    ->with('addresses')
                    ->with('location')
                    ->with('gallery')
                    ->get();
这带来了类似于:

[{"id":100,"name":"Live","type":"4","email":"p.woj6@gmail.com","logo":null,"twitter_business":null,"facebook_business":null,"instagram_business":"Woas","image":null,"gallery_id":null,"user_id":3,"api_key":null,"created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47","addresses":[{"id":6,"firstline_address":"96","secondline_address":"Street","town":"","city":"","postcode":"","telephone":"","created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47","pivot":{"business_id":100,"address_id":6}}],"location":{"id":95,"business_id":100,"longitude":-2.054067,"latitude":53.486755,"slug":"Live & Now","created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47"},"gallery":null}]
Business::where('id', $id)
                ->with('addresses')
                ->with('location')
                ->with('gallery')
                ->get()
                ->map(function($business){
                   return $business->image = !$business->image ? $business->image = 'N/A' : $business->image 
                });
但是,我得到一个错误,即集合中不存在空的图像。如果$business->image为空,则忽略它

我试过:

    @if($business->image == "null")
        <img class="images" id="image" alt="no image" src="" />
    @else
        <img class="images" id="image" src="{{ asset($business->image) }}" />
    @endif
@if($business->image==“null”)
@否则
图像)}}}”/>
@恩迪夫
但是没有成功,我正在寻找一种有效的方法,因为有时有多个字段是空的

        @if($business->image == "null")
            <img class="images" id="image" alt="no image" src="" />
        @else
            <img class="images" id="image" src="{{ asset($business->image) }}" />
        @endif
<div id="right" class="map">
    <div id="map"></div>

        <script type="text/javascript" src="https://maps.google.com/maps/api/js?v=3&key=AIzaSyAirYgs4Xnt9QabG9v56jsIcCNfNZazq50&language=en"></script>      
<!-- Displaying markers for business -->
                            @foreach ($business->location as $marker)
                                <script>
                            var map = new google.maps.Map(document.getElementById('map'), {
                            zoom: 19,
                            center: {lat: {{$marker->latitude}}, lng: {{$marker->longitude}}}
                             });

                                var marker = new google.maps.Marker({
                                position: {lat: {{$marker->latitude}}, lng: {{$marker->longitude}}},
                                map: map,
                                title: '{{$business->name}}'
  });

                        </script>
                        @endforeach
@if($business->image==“null”)
@否则
图像)}}}”/>
@恩迪夫
@foreach($business->location as$marker)
var map=new google.maps.map(document.getElementById('map'){
缩放:19,
中心:{lat:{{$marker->latitude},lng:{{{$marker->longitude}}
});
var marker=new google.maps.marker({
位置:{lat:{{$marker->latitude},lng:{{{$marker->longitude}},
地图:地图,
标题:“{{$business->name}”
});
@endforeach
此处:

Business::where('id', $id)
                ->with('addresses')
                ->with('location')
                ->with('gallery')
                ->get()
                ->reject(function($business){
                   return !$business->image;
                });
这将拒绝具有空图像的业务,如果您仍希望浏览图像,您可以这样做,但填充字段,您可以尝试以下操作:

[{"id":100,"name":"Live","type":"4","email":"p.woj6@gmail.com","logo":null,"twitter_business":null,"facebook_business":null,"instagram_business":"Woas","image":null,"gallery_id":null,"user_id":3,"api_key":null,"created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47","addresses":[{"id":6,"firstline_address":"96","secondline_address":"Street","town":"","city":"","postcode":"","telephone":"","created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47","pivot":{"business_id":100,"address_id":6}}],"location":{"id":95,"business_id":100,"longitude":-2.054067,"latitude":53.486755,"slug":"Live & Now","created_at":"2017-06-22 15:13:47","updated_at":"2017-06-22 15:13:47"},"gallery":null}]
Business::where('id', $id)
                ->with('addresses')
                ->with('location')
                ->with('gallery')
                ->get()
                ->map(function($business){
                   return $business->image = !$business->image ? $business->image = 'N/A' : $business->image 
                });
或者,您可以检查它在循环中是否为空。这里有很多选择^^

还使用:

你可以这样做:

这将确保始终存在邮政编码,无论它是实际的邮政编码还是0

public function setPostcodeAttribute($value){
   $this->postcode = !$value ? 0 : $value;
}

是的,但不仅图像是空的,还有其他位也是空的,所以我不想去拒绝->图像,拒绝->地址->邮政编码等我想拒绝所有为空的内容,在这种情况下,你最好使用雄辩的getter和setter来确保每个字段都有可预测的数据,或者在数据库中默认它。从来没有听说过getter和setter,你能提供一个基于我案例的示例吗?奇怪的是它说$business->addresses在当前集合中不存在,但它确实存在,为什么?让我们来看看。