无论如何,我可以使用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;
答案 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查询,无论它是单个/多个语句。