如何使用laravel使用多个语句执行原始sql查询

Edd*_*ane 2 php mysql laravel

无论如何,我可以使用laravel框架使用多个语句执行查询,如下所示.我尝试过使用DB::statement但返回了sql语法错误,但是当我在phpmyadmin上执行相同的查询时,我的工作非常令人沮丧.请帮我.

例如

LOCK TABLE topics WRITE;

SELECT @pRgt := rgt FROM topics WHERE id = ?;

UPDATE topics SET lft = lft + 2 WHERE rgt > @pRgt;
UPDATE topics SET rgt = rgt + 2 WHERE rgt >= @pRgt;

INSERT INTO topics (title, overview, article, image, lft, rgt)
VALUES (?, ?, ?, ?, @pRgt, @pRgt + 1);

UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)

Sal*_*a96 8

是的,有一种方法,为了这样做,使用DB :: unexpared()方法,laravel准备并为sql查询做一些事情.
但相反,您可以在代码中使用DB :: unrepared使用绝对原始的,您可以像这样使用它:

DB::unprepared('LOCK TABLE topics WRITE;

SELECT @pRgt := rgt FROM topics WHERE id = ?;

UPDATE topics SET lft = lft + 2 WHERE rgt > @pRgt;
UPDATE topics SET rgt = rgt + 2 WHERE rgt >= @pRgt;

INSERT INTO topics (title, overview, article, image, lft, rgt)
VALUES (?, ?, ?, ?, @pRgt, @pRgt + 1);

UNLOCK TABLES;');
Run Code Online (Sandbox Code Playgroud)

它将执行您的整个SQL查询,无论它是单个/多个语句.

  • 是的,这就是为什么它被称为无准备:)所以你不能使用准备好的语句,你可以尝试另一种方法尝试将所有参数组合在一个数组中,将您的查询视为一个字符串并替换'?' 顺序使用数组中的相应参数,然后将您的字符串发送到DB :: unrepared方法:) (2认同)