Ich habe eine assignesToMany-Verknüpfung für Benutzer und Kontakte.
Ich möchte die Kontakte des angegebenen Benutzers finden. Ich würde etwas wie
brauchen %Vor%Das Kochbuch spricht davon, Bedingungen zu enthalten, benutzerdefinierte Finder-Methoden zu geben und Assoziationsschlüssel zu singen, aber ich habe nicht herausgefunden, wie man diese zusammenstellt.
Wenn Sie von der Tabelle Contacts
abfragen, dann suchen Sie nach Query::matching()
oder Query::innerJoinWith()
, nicht (nur) Query::contain()
.
Hier ist ein Beispiel mit Ihren Tabellen:
%Vor%Dies fügt automatisch die erforderlichen Joins + Bedingungen zur generierten Abfrage hinzu.
Falls Sie manuell eine Viele-zu-Viele-Verknüpfung über hasMany
und belongsTo
einrichten, können Sie direkt auf die Join-Tabelle zielen:
Falls Sie wirklich möchten, dass alle Assoziationen auch in Ihren Ergebnissen zurückgegeben werden, verwenden Sie einfach weiterhin contain()
too
Das würde alle Benutzer enthalten, die zu einem Kontakt gehören.
In Fällen, in denen Sie mehrere Übereinstimmungen haben und nur diese Übereinstimmungen enthalten möchten, müssen Sie auch das Containment filtern. In diesem Beispiel macht es wenig Sinn, da es nur eine Übereinstimmung geben würde, aber in anderen Situationen könnte es nützlich sein, wenn Sie zum Beispiel alle Kontakte mit aktiven Benutzern abgleichen und die Kontakte einschließlich aller Kontakte abrufen möchten die zugehörigen aktiven Benutzer:
%Vor% Sie können auch auf tiefere Assoziationen zielen, indem Sie die aus Query::contain()
bekannte Syntax für den Punktnotierten Pfad verwenden. Wenn Sie beispielsweise eine Users hasOne Xyz
Assoziation hätten, könnten Sie nach Xyz.id
mit
Mit diesen Assoziationen und Ihren einfachen Anforderungen können Sie auch leicht von der anderen Seite abfragen, zB über die Users
-Tabelle und verwenden Sie nur Query::contain()
, um die zugehörigen Kontakte aufzunehmen, wie
Alle Kontakte können dann in der Entitäten contacts
-Eigenschaft gefunden werden.
Tags und Links cakephp associations cakephp-3.0 query-builder condition