【问题标题】:用于关系数据表的 addSelect 和 whereIn 的雄辩查询
【发布时间】:2022-01-20 13:30:36
【问题描述】:

我正在使用 laravel 8。我有 2 个相关的数据表。一个是“客户”,另一个是“工作”。一个客户可以有许多工作的历史。我正在尝试使用 eloquent 构建一个查询,该查询将在一个集合中包含客户及其所有工作。我已经尝试了一些东西,并且

我最常遇到的错误

SQLSTATE[21000]:基数违规:1242 子查询返回超过 1 行(SQL:选择 customers.*,(选择 type from jobs where jobs.type in (HVAC, Select )) 作为jobType 来自customers)

现在我很确定它会这样做,因为客户有不止一项工作,但我不知道如何做到这一点,所以这不是问题。这实际上是我想要完成的。

我尝试了一些方法:

$jobs = Job::where('class','LIKE','%'.$request->class.'%')
            ->whereBetween('date_booked',[$request->start_date, $request->end_date])                    
            ->join('customers', 'customers.location_number', '=', 'jobs.location_number')
            ->join('notes', 'notes.location_number', '=', 'jobs.location_number')
            ->where('jobs.type',$type)
            ->take('30')->get();

我也试过(作为一个非常简单的测试:

$jobs = Customer::addSelect(['jobType' => Job::select('type')
                ->whereIn('jobs.type',$type)])
                ->get();

但 id 似乎不起作用。

【问题讨论】:

  • 我认为这个日期['01-01-1970'应该显示为['1970-01-01'
  • 另外它不像你在这段代码中创建子查询,你确定错误来自这段代码吗
  • 是的,我确定。这个想法保持不变。具有来自相关数据表的子集合的集合。

标签: php laravel eloquent laravel-query-builder


【解决方案1】:

试试这个查询:

$jobs = Job::join('customers', 'customers.location_number', '=', 'jobs.location_number')
            ->join('notes', 'notes.location_number', '=', 'jobs.location_number')
            ->where('jobs.class','LIKE','%'.$request->class.'%')
            ->whereBetween('jobs.date_booked',[$request->start_date, $request->end_date])
            ->where('jobs.type',$type)
            ->take('30')
            ->get();

join() 查询中,您必须在where()select()groupBy() Eloquent 函数中用表指定列名。例如:jobs.classjobs.type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2021-06-17
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2016-02-26
    • 2018-12-09
    相关资源
    最近更新 更多