Zu machen, wie die Kriterien mit komplexen Abfrage in Yii-framework?
Ich habe die Abfrage wie diese:
SELECT * FROM activity
WHERE (((userId = 1 OR userId IN(SELECT userId FROM follower WHERE followerId = 1))
AND activityType IN(1, 2, 3))
OR (targetId = 24 AND aType IN(1, 2, 3, 4, 5)))
ORDER BY id DESC;
Ich versuche zu verwenden model()->findAllBySql($sql)
und es funktioniert. Aber ich will es machen mit CDbCriteria
, wenn Sie andere Lösungen, lassen Sie es mich wissen 😀
Ein bisschen alte Frage, aber ich brauche zu kommentieren. Beim Umgang mit komplexen Abfragen NICHT verwenden Sie alle ORM. Sie haben für den Umgang mit reinem SQL (AR bietet eine
Ośmiałowski könnten Sie uns den Grund, warum wir sollten Sie nutzen findAllBySql anstelle der Verwendung von ORM(Kriterien).
findAllBySql()
- Methode).Ośmiałowski könnten Sie uns den Grund, warum wir sollten Sie nutzen findAllBySql anstelle der Verwendung von ORM(Kriterien).
InformationsquelleAutor aslingga | 2010-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man immer noch bauen Sie diese Anweisung mit einer CDbCriteria ich denke... so etwas wie:
Als diesem Punkt könnte man genauso gut schreiben Sie einfach eine reguläre SQL-Anweisung, aber möglicherweise gibt es einige Vorteile, es zu tun auf diese Weise: verbindliche params, Zusammenführung von Kriterien, hinzufügen von zusätzlichen Kriterien, etc.
InformationsquelleAutor thaddeusmt
So lange, wie Sie Ihre einfache SQL funktioniert, sind Sie sicher. Es gibt viele Male, wenn ich zu werfen, Aktiven Datensatz entfernt und nur den job zu erledigen in der ol' saner Weg.
Habe ich versucht zu übersetzen, diese Abfrage in eine lesbare CDbCriteria Bau. Schlechte Idee. Yii saugt, wenn es um die Abfrage komplexer Daten.
Es ist grundsätzlich "misdesigned". Ich sage nicht, dass ich es besser machen können, obwohl.
ein bisschen später, aber 5 Jahre später, welche Rahmenbedingungen würden Sie dann empfehlen?
In den Bereichen PHP, es gibt null Punkt, mit etwas anderes als Lehre.
InformationsquelleAutor pestaa
Die Antwort finden Sie hier:
http://www.yiiframework.com/doc/guide/1.1/en/database.dao#executing-sql-statements
In Ihrem Fall:
@pestaa ist richtig, dass manchmal Sie haben zu werfen, aktiven Datensatz aus dem Fenster. Dies gilt insbesondere, wenn Sie tun, Massen-updates, wo die Schleife durch zahlreiche Modelle, ist schrecklich ineffizient.
ist Ihre Frage zur Verwendung von CDbCriteria und wie Sie bilden solchen Aussage? Wenn ja, lass es mich wissen, vielleicht kann ich helfen. Einer der Vorteile von CDbCriteria ist es gebunden enthält Parameter, die notwendig ist, verhindern Sie SQL-injection, wenn Sie Abfragen mit Benutzereingaben. Ich habe nicht versucht, deine Aussage oben, aber ich sehe keinen Grund warum es nicht funktionieren würde.
Möchte ich kombinieren Sie es mit CPanigation in Yii, gibt es eine Möglichkeit es möglich zu machen?
InformationsquelleAutor Philip Walton
Verwenden Sie einfach CSqlDataProvider
http://www.yiiframework.com/doc/api/1.1/CSqlDataProvider
Disclaimer: ich weiß, es ist nicht eine präzise Antwort auf diese particural Frage, aber es könnte helfen, das problem zu umgehen, gegeben wurde. Ich vermute, dass der Hauptzweck dieser Frage ist der erste Weg, um CGridView, CListView etc. mit beliebigen SQL.
InformationsquelleAutor shark555
Benutze ich
CDbCriteria
für komplexe Abfragen, in denen ich diewith
Funktion.Können Sie bauen komplexe Kriterien wie diese:
Ich habe nicht geprüft, wie
OR
können, kommen hier ins Spiel.Durch die Verwendung von scopes, können Sie auch einfügen, einige komplexere Kriterien und immer noch halten Sie Ihre Suchbedingung lesbar.
Dies ist ziemlich mächtig. Ich wollte nicht sehen, ein komplettes "tutorial" über diesen noch; ich Schloss das aus dem source code.
InformationsquelleAutor Mario