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