【问题标题】:Laravel query not using where clause for dateLaravel 查询不使用 where 子句作为日期
【发布时间】:2021-01-10 11:53:12
【问题描述】:

我做了一个 laravel 查询,它获取所有数据但不使用 $startdate 的 where 子句。

$user->studentGroups()->with([
            'GroupTasks' => function ($queryTwo) use ($startdate)

    { return $queryTwo->where('start_date', '>', $startdate); } // THIS LINE IS NOT WORKING!!

    ])->with(['GroupTasks.prgressList' => function ($queryThree) use ($student_id)
    { return $queryThree->where('progress_student_task_users.mis_id', $student_id); },
        'GroupTasks.studentViews' => function ($queryfour) use ($student_id){ return $queryfour->where('student_task_user_vieweds.mis_id', $student_id)->latest(); },
    ])->get();

如果没有开始日期,它只会获取所有不是真正想法的数据。 知道如何解决吗?

【问题讨论】:

标签: sql laravel vue.js eloquent


【解决方案1】:

试试这个:

$user->studentGroups()
    ->with([
        'GroupTasks' => function ($query) use ($startdate, $student_id) {
            return $query->whereDate('start_date', '>', $startdate)
            ->with([
                'prgressList' => function ($query) use ($student_id) {
                    return $query->where('progress_student_task_users.mis_id', $student_id);
                },
                'studentViews' => function ($query) use ($student_id) {
                    return $query->where('student_task_user_vieweds.mis_id', $student_id)->latest();
                },
            ]);
        }

    ])->get();

【讨论】:

  • 不,我不断收到错误:未定义变量:student_id
【解决方案2】:

如果我将 ->get() 移动到 where 子句之后,它会获取包括开始日期在内的数据,但不包括其余的 with !

$user->studentGroups()->with([
            'GroupTasks' => function ($queryTwo) use ($startdate)

    { return $queryTwo->where('start_date', '>', $startdate); } // THIS LINE IS NOT WORKING!!

    ])->get() // ADD GET() HERE NOW WORKS

->with(['GroupTasks.prgressList' => function ($queryThree) use ($student_id)
        { return $queryThree->where('progress_student_task_users.mis_id', $student_id); },
            'GroupTasks.studentViews' => function ($queryfour) use ($student_id){ return $queryfour->where('student_task_user_vieweds.mis_id', $student_id)->latest(); },
    ])->get();

【讨论】:

    【解决方案3】:

    尝试改用whereDate()

    return $queryTwo->whereDate('start_date', '>', $startdate)
    
    

    另外,尝试将start_date 字段添加到您的GroupTask 模型中,如下所示:

    protected $dates = [
        'start_date',
        'end_date'
    ];
    

    您可以在此处阅读有关属性转换的更多信息:https://laravel.com/docs/8.x/eloquent-mutators#date-mutators

    【讨论】:

    • 我不认为它是日期,查看调试栏查询未使用语句中的 where 子句。
    • 尝试提交第二个with()。第一个 with() 语句可能被第二个语句重载了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多