【问题标题】:Laravel ORM select query function load() on nullLaravel ORM 选择查询函数 load() on null
【发布时间】:2016-05-03 08:29:40
【问题描述】:

这是我加载用户创建的提交的函数。

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'));
}

这会返回一个错误

在 null 上调用成员函数 load()

当没有提交记录时。

DB上没有提交怎么办?

【问题讨论】:

  • 您需要绕过null 案例,您已经到了这一点,所以我认为检查null 值对您来说并不是什么大挑战。

标签: php laravel orm


【解决方案1】:

只需先使用 if 语句检查其 null

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();

不完全确定代码能否完美运行,但我相信您可以对其进行调整。关键是通过使用您已经设置的关系,您的代码可以更短并且仍然/或更具可读性。

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2015-04-18
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多