Abfrage anzeigen (Query Builder 10)


Ansichtsabfragen können Mehrtabellenabfragen implementieren, die nicht auf Datenbankansichten basieren, und erfordern nicht, dass die Datenbank Ansichten unterstützt. Dies ist eine empfohlene Alternative zur JOIN-Methode, zum Beispiel:

Db::view('User', 'id,name')
    ->view('Profile', 'truename,phone,email', 'Profile.user_id=User.id')
    ->view('Score', 'score', 'Score.user_id=Profile.id')
    ->where('score', '>', 80)
    ->select();

Die generierte SQL-Anweisung Ähnlich wie:

SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

Beachten Sie, dass die Ansichtsabfrage die Tabellen- und Join-Methoden nicht aufrufen muss und Sie beim Aufrufen der Where- und Order-Methoden nur die verwenden müssen Feldnamen, ohne den Tabellennamen hinzuzufügen.

Standardmäßig INNER verwenden Join-Abfrage. Wenn Sie sie ändern müssen, können Sie Folgendes verwenden:

Db::view('User', 'id,name')
    ->view('Profile', 'truename,phone,email', 'Profile.user_id=User.id', 'LEFT')
    ->view('Score', 'score', 'Score.user_id=Profile.id', 'RIGHT')
    ->where('score', '>', 80)
    ->select();

Die generierte SQL-Anweisung ähnelt:

SELECT User.id,User.name,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User LEFT JOIN think_profile Profile ON Profile.user_id=User.id RIGHT JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

Sie können den Alias ​​verwenden:

Db::view('User', ['id' => 'uid', 'name' => 'account'])
    ->view('Profile', 'truename,phone,email', 'Profile.user_id=User.id')
    ->view('Score', 'score', 'Score.user_id=Profile.id')
    ->where('score', '>', 80)
    ->select();

erzeugen Die SQL-Anweisung wird zu:

SELECT User.id AS uid,User.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user User INNER JOIN think_profile Profile ON Profile.user_id=User.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80

Sie können Arrays verwenden, um Tabellennamen und Aliase zu definieren, zum Beispiel:

Db::view(['think_user' => 'member'], ['id' => 'uid', 'name' => 'account'])
    ->view('Profile', 'truename,phone,email', 'Profile.user_id=member.id')
    ->view('Score', 'score', 'Score.user_id=Profile.id')
    ->where('score', '>', 80)
    ->select();

Die generierte SQL-Anweisung wird zu:

SELECT member.id AS uid,member.name AS account,Profile.truename,Profile.phone,Profile.email,Score.score FROM think_user member INNER JOIN think_profile Profile ON Profile.user_id=member.id INNER JOIN think_socre Score ON Score.user_id=Profile.id WHERE Score.score > 80