2016-04-09 7 views
1

Ich verwende CakePhp 3.x und ich versuche, Daten auf den Grundlagen der zugehörigen Daten zu filtern. Lassen nehme an, ich habe zwei Modelle Benutzer und ProfileWie werden nur die Datensätze abgerufen, denen kein Datensatz zugeordnet ist?

Benutzer Hat-ein Profil und Profile gehört zu einem Benutzer.

also möchte ich jene benutzer, die nicht profil haben so freundlicherweise helfen mir helfen, wie kann ich die bedingungen anwenden?

$this->Users->find('all',[ 
    'conditions'=>['Profile.id'=>Null] 
]) 

Ich habe versucht, wie dieses ich, was es falsch ist, und dann habe ich versucht, es mit enthalten, enthalten aber macht Filter auf zugehörigen Daten nicht für die Nutzer so ist es eine Möglichkeit, diejenigen Benutzer zu erhalten, die kein Profil?

Antwort

1

Siehe den Link unten: -

http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#using-notmatching

Es gibt drei Arten von Filtern von Daten auf der Basis der zugehörigen Daten.

1 ->passend

2 ->noMatching

3 -> siehe Link oben

Passende Diese Funktion Filter Ergebnisse, die Bezug auf die angegebenen haben Assoziation: Für jetzt sind es Profile.

$this->Users->find()->matching('Profiles') //This will get those user how have profile 

NoMatching

Das Gegenteil von passenden() ist notMatching(). Mit dieser Funktion wird die Abfrage ändern, so dass es filtert Ergebnisse, die in keinen Zusammenhang mit dem angegebenen Verein haben:

$this->Users->find()->noMatching('Profiles') //This will get those user how have no profile 
0

Man könnte so etwas wie dies versuchen:

$query = $this->Users->find() 
    ->contain([ 
    'Profiles' => function ($q) { 
     return $q 
     ->select(['id', 'name']) // Your profile fields, say id, name etc. 
     ->where(['Profiles.id' => NULL]); 
    } 
]); 

Hoffnung, das hilft.

+0

siehe diesen Link http://book.cakephp.org/3.0/en/orm/query-builder.html # using-notmatching und danke für die Hilfe. –

+0

@MuhammadAsifSaleem Wenn Sie das gelesen haben und Ihre Frage beantworten können, tun Sie dies bitte, indem Sie die Lösung als tatsächliche Antwort posten - danke! – ndm