2015-04-28 4 views
6

I Thema Tabelle, dieeinige Zeilen einer Tabelle in Laravel 4

id name 

und Sprachen Tabelle enthält, die

id subject_id 

und Teilungstabelle

id name 

schließlich Subjekt- enthält Divisionstabelle (Pivot-Tabelle)

id subject_id division_id 

jetzt existieren eins-zu-eins-Beziehung zwischen Betreff-Tabelle und Sprachen Tabelle und viele-zu-viele Beziehung zwischen Betreff-Tabelle und Divisionstabelle, ich muss nur die Themen der Betreff-Tabelle ohne die Sprachen mit der Beziehungsfunktion zupfen

jetzt kann ich die Sprachen erhalten nur der Subjekt-Tabelle der Beziehung Funktion In Abteilung Modell wie die folgenden

public function langSubject() 
{ 
    return $this->belongsToMany('Subject' , 'subject_division','division_id','subject_id') 
       ->join('lang_subject', 'lang_subject.subject_id' ,'=', 'subject.id')->get(); 

} 

Aber bis jetzt kann ich nicht die Themen bekommt nur ohne die Sprachen

Irgendwelche Vorschläge?

+1

Ihre Frage ist ziemlich unklar. Sie müssen genauer angeben, auf welches Modell Sie zugreifen möchten (ohne verwandte Sprache). Wenn ich Ihre Frage richtig lese: Sie versuchen, Themen zu finden, für die keine Beziehung definiert ist. Dies ist nicht etwas, für das die Beziehungsfunktion verwendet werden sollte, da Sie buchstäblich versuchen, das entgegengesetzte Problem zu lösen, für das es entworfen wurde. –

+1

erstens, danke Sir Jim für einen Kommentar, schau ich habe eine Tabelle, die alle Fächer wie (Englisch, Mathematik, Deutsch, Wissenschaft ....) Themen BelongsToMany Divisionen in subject_division (meine Pivot-Tabelle) und auch vorhanden Tabelle heißt lang_table Diese Tabelle hat 1: Beziehung mit Themen Tabelle, die bedeuten, dass diese Tabelle wird tragen Sprachen nur wie (Englisch, Deutsch) Jetzt muss ich zupfen (Math, Science) nur aus der Betreff-Tabelle ohne (Englisch, Deutsch). –

+0

Vielleicht können Sie whereIn und whereNotIn mit einer Unterabfrage verwenden (http://stackoverflow.com/questions/16815551/how-to-do-this-in-laravel-subquery-where-in). Also eine Abfrage wie SELECT * FROM Division inner Join Betreff auf ... wo subject.id nicht in (SELECT subject_id aus Sprachen) – Rickkwa

Antwort

0

Sie müssen die Klausel -> select ('tableName1.fieldName1', 'tableName2.fieldName2', 'tableName3.fieldName3') zu Ihrer Anweisung nach der Join-Anweisung hinzufügen, um den tableName.fieldName abzurufen Verwenden Sie leftJoin statt Join, um die Ergebnisse zu erhalten, ob eine Übereinstimmung besteht oder nicht.

0

Auschecken Eloquent relationship documentation -> Sub-Überschrift "Abfrage Beziehung Existenz". Es erwähnt es :: hat Methode, die Sie in der Mode

Division::has('subject.lang', '<', 1)->get()

Oder zumindest das ist die Theorie nutzen könnten. Habe es noch nicht gebraucht ;-)

Es sollte auch von Laravel 4 unterstützt werden.