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

时间:2018-05-20 20:21:07

标签: php mysql laravel

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

EG

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;

1 个答案:

答案 0 :(得分:7)

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

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;');

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