我想从具有列名“ is_reviewed”的表中查询,当“ is_reviewed”的值为0时,则查询该表,如果值为“ 1”,则从其他表中查询,是否可能要这样做吗?
我正在使用Laravel 5.5,现在我只是在使用else,而这是行不通的。
$isReviewed = ProjectUser::where('user_id', Auth::user()->id)
->select(DB::raw('(CASE WHEN is_reviewed = 0 THEN "0" ELSE "1" END)'))->get();
if ($isReviewed == '0') {
$datas = ProjectUser::where('user_id', Auth::user()->id)
->where('projects.status', 2)
->join('users', 'users.id', '=', 'project_users.user_id')
->join('projects', 'projects.id', '=', 'project_users.project_id')
->join('websites_list', 'websites_list.id', '=', 'projects.id_website')
->select('projects.*', 'websites_list.url_web', 'users.name', 'project_users.user_id')
->whereNotIn('is_reviewed', [1])
->get();
} elseif ($isReviewed == '1') {
$datas = ReviewProjectUser::where('reviewer_user_id', Auth::user()->id)
->where('projects.status', 2)
->join('users', 'users.id', '=', 'review_project_users.reviewer_user_id')
->join('projects', 'projects.id', '=', 'review_project_users.project_uid')
->join('websites_list', 'websites_list.id', '=', 'projects.id_website')
->select('projects.*', 'websites_list.url_web', 'users.name', 'review_project_users.reviewer_user_id')
->get();
答案 0 :(得分:1)
您要在查询中获取数组结果还是仅获取一行。如果您在查询中的预期结果只是一行,那么请不要使用->get()
尝试使用->first()
。
使用->get()
返回$isReviewed
作为数组。
尝试在查询中使用->first()
。这样。
无论如何,在这里简化您的查询是一种雄辩的方法。
$isReviewed = ProjectUser::where('user_id', Auth::user()->id)->first();
if ($isReviewed->is_reviewed == '0')
{
//your code
}
else if($isReviewed->is_reviewed == '1')
{
//your code
}
答案 1 :(得分:0)
首先,您的SQL语句错误。这就是为什么您的IF
无法正常工作的原因。
Secound,sql case
中的is_reviewed
已经具有静态值时,您无需使用ProjectUser
。
基于Laravel - Retrieving A Single Row / Column From A Table
您可以使用
$isReviewed = ProjectUser::where('user_id', Auth::user()->id)->value('is_reviewed');
您的$isReviewed
仅返回您字段的值,那么您只需要组合if语句。
if ($isReviewed == '0') {
$datas = ProjectUser::where('user_id', Auth::user()->id)
->where('projects.status', 2)
->join('users', 'users.id', '=', 'project_users.user_id')
->join('projects', 'projects.id', '=', 'project_users.project_id')
->join('websites_list', 'websites_list.id', '=', 'projects.id_website')
->select('projects.*', 'websites_list.url_web', 'users.name', 'project_users.user_id')
->whereNotIn('is_reviewed', [1])
->get();
} elseif ($isReviewed == '1') {
$datas = ReviewProjectUser::where('reviewer_user_id', Auth::user()->id)
->where('projects.status', 2)
->join('users', 'users.id', '=', 'review_project_users.reviewer_user_id')
->join('projects', 'projects.id', '=', 'review_project_users.project_uid')
->join('websites_list', 'websites_list.id', '=', 'projects.id_website')
->select('projects.*', 'websites_list.url_web', 'users.name', 'review_project_users.reviewer_user_id')
->get();
答案 2 :(得分:-1)
在下面的laravel查询中,返回一个结果数组,
*
如果您$isReviewed = ProjectUser::where('user_id', Auth::user()->id) ->select(DB::raw('(CASE WHEN is_reviewed = 0 THEN "0" ELSE "1" END)'))->get();
,您会看到结果是dd($isReviewd)
的数组。
因此,在这种情况下,您选择的是单行,可以通过在查询末尾添加ProjectUser
来限制查询,现在您的变量是->first()
的实例
最后,调用-ProjectUser
以访问您的变量。
总结 您的查询应如下所示:
>is_reviewd