Unter Verwendung des folgenden Codes:
DB::table('users')->get();
Möchte ich den Roh-SQL-Abfragestring erhalten, den der obige Datenbankabfrage-Generator erstellen wird. In diesem Beispiel wäre es SELECT * FROM users
.
Wie mache ich das?
Unter Verwendung des folgenden Codes:
DB::table('users')->get();
Möchte ich den Roh-SQL-Abfragestring erhalten, den der obige Datenbankabfrage-Generator erstellen wird. In diesem Beispiel wäre es SELECT * FROM users
.
Wie mache ich das?
Um alle ausgeführten Abfragen zu protokollieren, können Sie DB::enableQueryLog() in Verbindung mit DB::getQueryLog() verwenden. Die Ausgabe hat die folgende Struktur.
[
[
"query" => "select * from "users" where name = ?"
"bindings" => ["John Doe"]
"time" => 0.34
],
...
]
Zusätzlich habe ich hier einige Antworten kombiniert, um die perfekte Funktion zum Parsen des SQL mit den kompilierten Bindungen zu erhalten. Siehe unten. Ich habe sogar eine benutzerdefinierte Builder-Klasse erstellt, die diese Funktionalität implementiert, um z. B. User::where('name','John Doe')->parse();
function parse_sql(string $sql, array $bindings) : string
{
$compiled_bindings = array_map('compile_binding', $bindings);
return preg_replace_array("/\?/", $compiled_bindings, $sql);
}
function compile_binding($binding)
{
$grammar = new MySqlGrammar;
if (is_bool($binding))
{
return (int)$binding; //Diese Zeile hängt von der Datenbank-Implementierung ab
}
if(is_string($binding))
{
return "'$binding'";
}
if ($binding instanceof DateTimeInterface)
{
return $binding->format($grammar->getDateFormat());
}
return $binding;
}
Sie können die toSql-Methode verwenden - der einfachste Weg
DB::table('users')->toSql();
Und auch wenn Sie Bindungen in Ihrer Abfrage haben und die Abfrage mit Bindungen sehen möchten. Sie können etwas Ähnliches verwenden:
$query = DB::table('table')->whereIn('some_field', [1,2,30]);
$sql_with_bindings = str_replace_array('?', $query->getBindings(), $query->toSql());
dd($sql_with_bindings);
Dies ist die Funktion, die ich in meine Basismodellklasse platziert habe. Übergeben Sie einfach das Abfragebuilder-Objekt und der SQL-String wird zurückgegeben.
function getSQL($builder) {
$sql = $builder->toSql();
foreach ( $builder->getBindings() as $binding ) {
$value = is_numeric($binding) ? $binding : "'".$binding."'";
$sql = preg_replace('/\?/', $value, $sql, 1);
}
return $sql;
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.