Laravel 5.X: How Do I Get Raw SQL Query As String With Binders From Query Builder. Its very easy and now few steps from here. It's interesting.
use Illuminate\Support\Facades\DB;
$model = DB::table('employee') ->where("employee.id", "<>", 0) ->whereIn("employee.id", array(1, 2)) ->where("employee.type", "PERMANENT") ->where(function ($q) { $q->where("employee.id", 1)->orWhere("employee.id", 2); }) ->limit(10)->offset(0) ->groupBy("employee.id") ->select("employee.id"); $replace = function ($sql, $bindings) { $pos = 0; $needle = '?'; foreach ($bindings as $replace) { if (is_string($replace)) { $replace = DB::connection()->getPdo()->quote($replace); } $pos = strpos($sql, $needle, $pos); if ($pos !== false) { $sql = substr_replace($sql, $replace, $pos, strlen($needle)); $pos = $pos + strlen($replace); } } return $sql; }; $sql = $replace($model->toSql(), $model->getBindings()); echo "SQL=" . $sql;
And output would be like below:
SELECT `employee`.`id` FROM `employee` WHERE `employee`.`id` <> 0 AND `employee`.`id` IN (1, 2) AND `employee`.`type` = 'PERMANENT' AND (`employee`.`id` = 1 OR `employee`.`id` = 2) GROUP BY `employee`.`id` LIMIT 10 OFFSET 0
No comments:
Post a Comment