855 Stimmen

Wie kann ich den Abfrage-Generator dazu bringen, seine Roh-SQL-Abfrage als Zeichenfolge auszugeben?

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?

13voto

Angelito Tan Punkte 151

Es gibt bereits viele Informationen, die beantwortet wurden. Ich werde einfach meine eigenen Erkenntnisse posten, die ich jedes Mal verwende, wenn ich die SQL-Abfrage ausgeben muss, bevor sie ausgeführt wird.

Betrachten Sie das untenstehende Beispiel:

$user = DB::table('user')->where('id',1);
echo $user->toSql();

echo $user->toSql() = Dies gibt einfach die Rohabfrage aus, zeigt aber nicht die übergebenen Parameter an.

Um die Abfrage mit den übergebenen Parametern auszugeben, können wir Laravel getBindings() und Helper str_replace_array wie folgt verwenden:

$queryWithParam = str_replace_array('?',$user->getBindings(),$user->toSql());
echo $queryWithParam;

Ich hoffe, das hilft auch.

11voto

Dharmik Punkte 369

Fügen Sie diese Funktion zu Ihrer Anwendung hinzu und rufen Sie sie einfach auf.

function getQuery($sql){
        $query = str_replace(array('?'), array('\'%s\''), $sql->toSql());
        $query = vsprintf($query, $sql->getBindings());     
        return $query;
}

Ausgabe: "select * from user where lang = 'en' and status = '1' order by updated_at desc limit 25 offset 0"

10voto

Felix Geenen Punkte 2077

Mit der neuesten Version von Laravel 10 können Sie jetzt Ihre SQL-Abfragen einschließlich der Bindungen einfach durch Verwendung von toRawSQL() auf Ihrem QueryBuilder ausgeben:

User::where('email', 'foo@example.com')->toRawSql();
// "SELECT * FROM users WHERE email = 'foo@example.com'"

Auch die neue dd() Ausgabe kann nützlich sein:

User::where('email', 'foo@example.com')->dd();
// "SELECT * FROM users WHERE email = ?"
// [
//  0 => "foo@example.com"
// ]

Weitere Informationen finden Sie in der Laravel News Ankündigung

10voto

panqingqiang Punkte 167

Verwende das Debugbar-Paket

composer require "barryvdh/laravel-debugbar": "2.3.*"

Bildbeschreibung hier eingeben

9voto

Zayn Ali Punkte 4385

Von laravel 5.2 und höher kannst du DB::listen verwenden, um die ausgeführten Abfragen zu erhalten.

DB::listen(function ($query) {
    // $query->sql
    // $query->bindings
    // $query->time
});

Oder wenn du eine einzelne Builder-Instanz debuggen möchtest, kannst du die Methode toSql verwenden.

DB::table('posts')->toSql();

CodeJaeger.com

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.

Powered by:

X