如何在 Laravel 中使用 SQL 原始查询

How to use SQL raw query in Laravel

SQL table:

SELECT id,
       account_name,
       parent_id
FROM
  (SELECT id,
          account_name,
          parent_id,
          CASE
              WHEN id = 1 THEN @idlist := CONCAT(id)
              WHEN FIND_IN_SET(parent_id, @idlist) THEN @idlist := CONCAT(@idlist, ',', id)
          END AS checkId
   FROM chart_of_account
   ORDER BY id ASC) AS T
WHERE checkId IS NOT NULL

当我在 MySQL 中 运行 这个查询时,它工作正常并且结果被完美地获取,但是当我 运行 在 Laravel 中时,它像这样:

$accountId = DB::select('SELECT id,account_name,parent_id FROM
                                    (SELECT id,account_name,parent_id,
                                        CASE WHEN id = '.$account_id.' THEN @idlist := CONCAT(id)
                                                 WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,', ',id)
                                            END as checkId
                                     FROM chart_of_account
                                     ORDER BY id ASC) as T
                                WHERE checkId IS NOT NULL');

报错

Argument 1 passed to Illuminate\Database\Connection::prepareBindings() must be of the type array, string given, 

试试这个:

$query = 'YOUR_QUERY_THE_BIG_ONE:)';
$result = DB::select($query,[]);
dd($result);

可选地,您可以在使用用户输入的任何地方使用 ? 登录查询以防止 mySQL 注入问题,然后在 select 函数的第二个参数数组中提供它们的值.一个例子是:

$inputUserEmail = $request->input('email');
$query = 'SELECT * FROM users WHERE email=?';
$result = DB::select($query,[$inputUserEmail]);
dd($result);

我希望它能给你一个想法