拉拉威尔粗鲁的表演空荡荡的



我有一个关于关系的laravel crud。但是当我想加载页面时,有些表行没有值。并且这给出了错误:"尝试读取属性";name";在空上

但是,我如何忽略此消息并继续在页面中加载?

index.blade:

@foreach($files as $file)
<tr>
<td>{{$file->id}}</td>
<td>{{$file->title}} </td>
<td>{{$file->description_short}} </td>
<td>{{$file->description_long}} </td>
<td>{{$file->file}}</td>
<td>{{$file->language->name}} </td>
<td>{{$file->subfolder->name}} </td>

<td>{{$file->role->name}} </td>
<td>
<a href="{{ route('admin.file.edit',$file->id)}}" class="btn btn-primary">Edit</a>
</td>
<td>
<form action="{{ route('admin.file.destroy', $file->id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-danger" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>

控制器:

public function index()
{
$files = File::with('subfolder', 'language', 'tag')->get();
$languages = Language::all();
$tags = Tag::all();
$subfolders = Subfolder::all();
$users = User::all();    
return view('admin.file.index', compact('files', 'languages', 'tags', 'users', 'subfolders'));
}

我希望索引忽略所有NULL属性

在php变量之前使用@将适用于您,如下所示。

{{@$file->language->name}} 

有多种方法:

  • 错误控制操作员:

    @$file->language->name@运算符抑制错误消息(imho不是很干净:(,但结果相同(

    来自文件:

    // Note: The @-operator works only on expressions. A simple rule of thumb   is: if one can take the value of something, then one can prepend the @ operator to it.
    // For instance, it can be prepended to variables, functions calls, certain language construct calls (e.g. include), and so forth. 
    // It cannot be prepended to function or class definitions, or conditional structures such as if and foreach, and so forth.
    

  • 经典三元算子方式

    $file->language ? $file->language->name : null;


  • 来自PHP7+:空凝聚算子

    $file->language->name ?? null;


  • 来自PHP8+:空安全操作员

    $file->language?->name;(惊人!:-((


此外,通过使用

{{ $file->language->name ?? '' }} # typical PHP way
{{ $file->language?->name }} # if object/relation "language" exist then access "name" propery

注意:

当您对变量{{@$file->language->name}}使用@时,我们将跳过错误消息。这意味着我们要告诉Laravel"别管这个变量">这不是检查是否为空的最佳方法

Laravel有一个内置的助手,名为optional()

https://laravel.com/docs/9.x/helpers#method-可选

<td>{{ optional($file->language)->name }} </td>

optional函数接受任何参数,并允许您访问该对象的属性或调用方法。如果给定的对象是null,则属性和方法将返回null,而不会导致错误。

最新更新