Ich habe einige Probleme mit CakePHP find() -Methode und Bedingungen in 'tiefer' Modell Assoziationen. Es gibt einige davon, aber ich konnte bisher keine Antwort finden.Bedingungen in verknüpften Modellen mit Model-> find() (CakePHP)
Meine Modellassoziationen sind User hasMany Post hasMany Comment hasMany Vote
bzw. Vote belongsTo Comment belongsTo Post belongsTo User
. Die belongsTo
Assoziationen verwenden innere Joins ('type =>' INNER ').
Wie finde ich alle Kommentarstimmen für Beiträge eines bestimmten Benutzers mit CakePHPs modell-> find() -Methode?
Ich habe bewusst eine Kette von vier Modellen verwendet, weil dies für Bedingungen in direkt verbundenen Modellen zu funktionieren scheint. Daher wird die Fremdschlüsselhaltungsspalte in der benachbarten Tabelle nicht verwendet (Bedingung 'Post.user_id == 1' anstelle von 'User.id == 1').
In SQL dies wäre:
SELECT v.*
FROM votes v
JOIN comments c ON (v.comment_id = c.id)
JOIN posts p ON (c.post_id = p.id)
JOIN users u ON (p.user_id = u.id)
WHERE u.id = 1
vermag ich nicht zu reproduzieren diese schließt sich FIND() + das Contain Verhalten. Obwohl ich einfach einen Benutzer mit all seinen Daten bekommen könnte, müsste ich dann alle Stimmen aus dem resultierenden Array sammeln.
Es ist nicht wie diese Arbeit (Achtung: unbekannt Spalte 'User.id'):
$this->Vote->recursive = 2; // or higher
$this->Vote->find('all',array('conditions' => array('User.id' => 1)));
In der Tat ist dies auch nicht statt Benutzer mit Post arbeiten (Vote-> Kommentar-> Post) sobald ich die Bedingung hinzufüge. Die hergestellte SQL-Abfrage verknüpft nur Stimmen und Kommentare.
Das zurückgebende Array sollte nur die Stimmen enthalten, die die obige SQL-Abfrage zurückgeben würde, alles andere sollte dabei "zusammengeführt" werden.
Hinweis: Meine Frage ist ganz in der Nähe dieser, die mir geholfen, die ersten Schritte: In cakephp how can I do a find with conditions on a related field?
Gibt es einen Grund, warum Sie mehrere AngleTo vermeiden? – cp3
Sie meinen, Sie haben eine Fremdschlüsselspalte user_id in der Vote-Tabelle und können Benutzer und Vote direkt zuordnen? Das scheint ein wenig überflüssig zu sein und schafft zirkuläre Beziehungen in meinem Schema. "Nachdem ich das gesagt habe, würde es funktionieren, denke ich. Oder missverstehe ich, was du unter multiple selectsTo bedeutest? Wenn ja, ist es möglich/notwendig, explizit eine Assoziation für Vote belongTo User hinzuzufügen und sie so zu konfigurieren, dass sie Kommentare und Abstimmungen "durchläuft"? – Wolfram
Das Hinzufügen eines Fremdschlüssels zu jeder Tabelle, der er durch eine andere Tabelle zugeordnet ist, wäre viel zu redundant. – BWelfel