首页 > 解决方案 > 在laravel中插入带有内部连接的select语句

问题描述

我想在 Laravel 中使用带有 select 语句和内部联接的插入查询。我有原始的 mysql 查询,当我在 MySql Workbench 中运行查询时,我得到了预期的结果。但我在 Laravel 日志中收到此错误

我尝试使用 Laravel Query Builder 和 getBindings() 函数来做到这一点。

local.ERROR: 传递给 Illuminate\Database\Query\Builder::cleanBindings() 的参数 1 必须是数组类型,给定字符串,在 C:\wamp\www\aquafresh_voyager\vendor\laravel\framework\src\Illuminate 中调用\Database\Query\Builder.php 第 860 行 {"userId":1,"email":"admin@admin.com","exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code : 0): 传递给 Illuminate\Database\Query\Builder::cleanBindings() 的参数 1 必须是数组类型,给定字符串,在 C:\wamp\www\aquafresh_voyager\vendor\laravel\framework\src\Illuminate 中调用\Database\Query\Builder.php 位于 C:\wamp\www\aquafresh_voyager\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php:2856 的第 860 行

这是控制器功能。

public function insertNewRoute(Request $request)
{
    $routeplan = new Routeplan;
    $user_email = auth()->user()->email;
    $RouteCode = $request->route_code;
    $routeplan->RouteplanCode = $request->routePlanCode;
    $routeplan->RouteCode = $RouteCode;
    $routeplan->DriverID = $request->driver;
    $routeplan->SalesmanID = $request->salesman;
    $routeplan->Routercode1 = $request->router_01;
    $routeplan->Routercode2 = $request->router_02;
    $routeplan->VehicleNo = $request->vehicle_no;
    $routeplan->Date = $request->date;
    $routeplan->Createuser = $user_email;
    $routeplan->Status = 'TEMP';
    $routeplan->save(); //this query works !

    $select = Invoice::join('customer', function ($join) {
                $join->on('invoice.CustomerCode', '=', 'customer.CustomerCode');
                $join->on('customer.CustomerCode',
                            'rootplan_product.CustomerCode');
            })->join('invoice', 'invoice.CustomerCode', '=', 
                        'customer.CustomerCode')
            ->select(['customer.CustomerCode','customer.RouteCode', 
                        'TEMP', 'rootplan_product.RouteplanCode', 
                        'invoice.Status'])
            ->where('invoice.Status','DOWNLOADED')
            ->whereIn('customer.RouteCode', $RouteCode)
            ->get();

    $bindings = $select->getBindings();
    $insertQuery = 'insert into rootplan_product 
                    (CustomerCode,RouteCode,STATUS)'. $select->toSql();
    \DB::insert($insertQuery, $bindings);
}

这是原始查询

INSERT INTO rootplan_product (CustomerCode,RouteCode,STATUS) SELECT 
customer.CustomerCode,customer.RouteCode,'TEMP' FROM invoice INNER JOIN 
customer ON invoice.CustomerCode = customer.CustomerCode WHERE 
invoice.Status = 'DOWNLOADED'
AND customer.RouteCode = 'MO-A'

标签: phpmysqllaraveleloquentlaravel-query-builder

解决方案


推荐阅读