我有一个关于关系的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"别管这个变量">。这不是检查是否为空的最佳方法
optional()
。
https://laravel.com/docs/9.x/helpers#method-可选
<td>{{ optional($file->language)->name }} </td>
optional
函数接受任何参数,并允许您访问该对象的属性或调用方法。如果给定的对象是null
,则属性和方法将返回null
,而不会导致错误。