Log raw query cùng với arguments

Cứ mỗi lần debug lâu lâu tôi sử dụng toSql() để log raw query, mục đích là để có cái nhìn tổng quát hơn về câu query phức tạp mà tôi vừa viết. Với những câu query cần pass argument vào, khi sử dụng toSql() thì y như rằng nó sẽ log query với các argument là dấu “?”.

Ví dụ:

$users = User::where('id', '1')->toSql();

Tôi sẽ được câu query như sau:

SELECT * FROM users where id = ?

Đó là ví dụ cho câu query ngắn và đơn giản, các bạn thử tưởng tượng với câu query phức tạp, dài với nhiều argument thì còn mắc mệt hơn nữa.

Nên tôi viết ra 1 đoạn code nhỏ mục đích là log raw query với argument bên trong sẵn luôn, cho các bạn dễ debug. Các bạn có thể copy về và sử dụng trong project của mình:

$bindings = $query->getBindings();
foreach ($bindings as &$binding) {
  $binding = is_numeric($binding) ? $binding : "'" . $binding . "'";
}
$sqlString = Str::replaceArray('?', $bindings, $query->toSql());

// Dành riêng cho các bạn nóng tính và mất kiên nhẫn.
// dd($sqlString);

Chúc các bạn nào chưa biết có thêm 1 mẹo nho nhỏ để code tốt hơn. Nếu các bạn có cách nào khác hay hơn please gửi email chỉ tôi nhé!

Happy Hacking 🙂