2016-11-28 21 views
1

我試圖找出最好的辦法或處理laravel對象變量爲空或不存在的最簡單的方法...驗證了laravel對象變量爲空或不存在

現在我試圖做到這一點我已經提出了2個解決方案,但他們都覺得不是最簡單或最乾淨的方式。

第一種方式是在控制器得到laravel對象後,我做了foreach循環,並在那裏檢查是否存在空或不存在的變量,如果是,則用' - '替換它。

所以在我的控制器將是

$dataarticle = Article::with('categories') 
       ->get(); 
      $i = 0; 
      foreach($dataarticle as $data){ 
       $datas[$i] = array(
        'id' => !empty($data->id) ? $data->id : '-', 
        'name' => !empty($data->name) ? $data->name : '-', 
        'category' => !empty($data->categories->name) ? $data->categories->name : '-', 
        'created_at' => !empty($data->created_at) ? $data->created_at : '-', 
       ); 
       $i++; 
      } 

在我看來,我只是做另一個foreach循環在我的表....它看起來不錯,但它也意味着我需要做2次的foreach。

的另一種方法是做鑑於變量檢查,所以我只需要做foreach循環一次......但它會使我認爲代碼是混亂..這樣

@foreach($datas2 as $data) 
         <tr> 
          <td class="bg-aqua disabled color-palette"></td> 
          <td hidden>{{ $data->id }}</td> 
          @if(!empty($data->name)) 
           @if($data->id > 1) 
            <td>{{ $data->name }}</td> 
           @else 
            <td>{{ $data->name }}</td> 
           @endif 
          @else 
           <td>-</td> 
          @endif 

          @if($data->hasartikel->count() > 0) 
           <td><a class="btn btn-default" disabled>{{ $data->jumlah }}</a></td> 
          @else 
           <td><a href="#" class="btn btn-default" disabled>{{ $data->hasartikel->count() }}</a> </td> 
          @endif 
         </tr> 
        @endforeach 

所以也許有是以更簡單的方式完成它的功能,方法或命令?因爲如果你的表中有很多變量,並且爲每個變量做相同的事情,那將會非常累人。

回答

2

只需添加getFieldAttribute模型中的每個字段,所以它可以在任何地方通過只是一個時間的配置

class Article extends Model 
{ 
    public function getNameAttribute($value) 
    { 
     return !empty($value) ? $value : '-'; 
    } 
} 

所以可以使用,在view可以簡單地調用變量如下。無需重新格式化

<td>{{ $data->name }}</td> 

查看詳情here

+0

Laravel核心是否通過返回一個默認值(如'NULL')處理屬性不存在的情況? –

+0

所以我只是把這個函數放到我的模型中,它會自動驗證值?或者我需要在我的視圖中調用這個函數?像$ data-> getNameAttribute-> name; –

+0

@CharlotteDunois抱歉不能確定,但​​通常laravel將返回存儲在db – xmhafiz

0

讓所有你需要的領域需要!!!!!!!!! )並且很開心