Laravel ORM在null上选择查询函数load()


Laravel ORM select query function load() on null

以下是我的函数,用于加载用户创建的提交。

public function viewSubs()
{
    $user = User::find(Input::get('id'));
    $submissions  = Submission::find($user)->sortByDesc('created_at');
    $submissions->load('user')->load('votes')->load('suggestions.votes');
    return view('submissions.index' , compact('submissions'));
}

返回错误

调用空上的成员函数load()

当提交的文件中没有记录时。

如果数据库上没有提交,该如何处理?

只需检查其null是否首先使用if语句:

public function viewSubs()
{
    $user = User::find(Input::get('id'));
    if ($submissions  = Submission::find($user)->sortByDesc('created_at')) {
        $submissions->load('user')->load('votes')->load('suggestions.votes');
    }
    return view('submissions.index' , compact('submissions'));
}

此外,根据您的数据库结构,我确信您可以通过使用模型的关系来裁剪大量代码,方法如下:

$user = User::find(Input::get('id'))
    ->with(['submissions'  => function($query) {
        $query->orderBy('created_at', 'asc');
    }, 'submissions.votes', 'submissions.suggestions.votes']);

然后将$user变量传递到视图,或:

$submissions = Submission::with('user', 'votes', 'suggestions.votes')
    ->where('user_id', Input::get('id'))
    ->sortByDesc('created_at')
    ->first();

不完全确定代码是否能完美工作,但我相信你可以调整它。关键是,通过使用你已经建立的关系,你的代码可以更短,更可读。