首页 文章

Laravel:在传递给`view`之前检查控制器是否有字段值

提问于
浏览
1

我有两个表,一个是 User 存储登录凭据,另一个是 Userinfo ,用于存储有关用户的个人信息 . 当用户注册时,他们不需要填写 UserInfo 表的所有输入(即,他们可能只填充其他一些的 GenderReligion 字段) . 因此,最终结果是 UserInfo 最终只会填充几个值或根本不填充 .

我现在面临的问题是当我从两个表中查看数据并以典型的laravel方式显示它时,它会抛出错误 Trying to get property of non-object . 这是预料之中的,因为并非所有用户都拥有来自 UserInfo 表的完整数据 . 我在控制器和视图中尝试了很多方法来处理错误消息,但未能找到解决方案 .

有没有办法检查列是否为空或半完整值并在传递到视图之前在控制器中正确处理它们?我认为这些检查应该在控制器中或视图以外的任何地方执行 . 如果没有,我如何在视图中处理它们?也许在循环内?非常感谢解决方案和建议!这是我在视图中的代码:

@forelse($donors as $donor)

    <div class="panel panel-default">

        <div class="panel-heading"><i class="fa fa-list-alt"></i> {{$donor->name}}</div>

        <div class="panel-body">

            <div class="row">
                <div class="col-md-6">

                    <div class="basic-info">

                        <h4>Basic Information</h4>

                        <p><strong>Blood Group: </strong>{{  $donor->user_info->blood  }}</p>
                        <p><strong>Sex: </strong>{{ $donor->user_info->sex }}</p>
                        <p><strong>Religion: </strong>{{ $donor->user_info->religion }}</p>
                        <p><strong>Age: </strong>{{ \Carbon\Carbon::parse($donor->user_info->dob)->age }}</p>

                    </div>

                </div>

            </div>

        </div>

    </div>


@empty

    <p>No records found!</p>

@endforelse

如您所见,因为并非所有用户都拥有表中的完整数据,laravel会抛出 Trying to get property of non-object 错误 . 我的控制器有标准的laravel方法将数据传递给视图:

public function index(User $user, Request $request)
{

    $donors = $user->with('user_info')->latest()->paginate(5);

    return view('donors.index', compact('donors'));
}

1 回答

  • 1

    从5.5版本开始,Laravel有一个optional()助手,我认为它可以帮到你 .

    在您的视图中尝试这样的事情:

    optional($donor->user_info)->blood
    

相关问题