Laravel查询来自表值的条件

时间:2019-02-09 02:25:43

标签: mysql sql laravel

我想从具有列名“ 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();

3 个答案:

答案 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