Laravel ORM 选择查询函数 load() on null
Posted
技术标签:
【中文标题】Laravel ORM 选择查询函数 load() on null【英文标题】:Laravel ORM select query function 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
值对您来说并不是什么大挑战。
【参考方案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();
不完全确定代码能否完美运行,但我相信您可以对其进行调整。关键是通过使用您已经设置的关系,您的代码可以更短并且仍然/或更具可读性。
【讨论】:
以上是关于Laravel ORM 选择查询函数 load() on null的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent ORM - 选择所有两个关系都不存在的模型时,生成的 SQL 和查询构建器结果不匹配
laravel orm where 条件中 mysql函数 怎么用
来自 SQL 的 Laravel Eloquent ORM 聚合函数
laravel orm where 条件中 mysql函数 怎么用