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