2015-04-28 12 views
6

ho tavola oggetto che contienePluck alcune righe di una tabella in laravel 4

id name 

e linguaggi tabella che contiene

id subject_id 

e divisione tavolo

id name 

infine soggetto- tavolo divisorio (tabella pivot)

id subject_id division_id 

ora esiste una relazione uno-a-uno tra la tabella degli argomenti e la tabella delle lingue e la relazione molti-a-molti tra la tabella degli oggetti e la tabella delle divisioni, ho bisogno di cogliere solo gli argomenti della tabella degli argomenti senza le lingue utilizzando la funzione di relazione

ora posso ottenere le lingue solo della tavola soggetto della funzione di rapporto Nel Divisione Modello come la seguente

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

} 

Ma fino ad ora non posso ottenere i soggetti solo senza le lingue

Qualche suggerimento?

+1

La tua domanda non è chiara. È necessario essere più specifici su quale modello si sta tentando di accedere ai soggetti (senza alcun linguaggio correlato) attraverso. Se sto leggendo correttamente la tua domanda: stai cercando di trovare argomenti per i quali non esiste una relazione definita. Questo non è qualcosa per cui la funzione di relazione dovrebbe essere usata, poiché stai letteralmente cercando di risolvere il problema opposto per cui è stato progettato. –

+1

in primo luogo, grazie signore Jim per un commento, guarda ho un tavolo che trasporta tutti i soggetti come (inglese, matematica, tedesco, scienza ....) I soggetti appartengono a molte divisioni in subject_division (mia tabella pivot) e esiste anche la tabella si chiama lang_table questa tabella ha relazione uno-a-uno con la tabella degli oggetti che significa che questa tabella sarà trasportata nelle lingue solo come (inglese, tedesco) Ora ho bisogno di strappare (matematica, scienza) solo dalla tabella degli argomenti senza (inglese, tedesco). –

+0

Forse puoi usare whereIn e whereNotIn con una sottoquery (http://stackoverflow.com/questions/16815551/how-to-do-this-in-laravel-subquery-where-in). Quindi una query come SELECT * FROM division inner join subject on ... where subject.id not in (SELECT subject_id from languages) – Rickkwa

risposta

0

È necessario aggiungere la clausola -> selezionare ('tableName1.fieldName1', 'tableName2.fieldName2', 'tableName3.fieldName3') nella propria istruzione dopo l'istruzione join per ottenere tableName.fieldName e potrebbe essere necessario usa leftJoin invece di unirsi per ottenere i risultati se c'è una corrispondenza o meno.

0

Check out Eloquent relationship documentation -> sottotitolo "Interrogazione dell'esistenza della relazione". Ci si menziona :: ha metodo, che è possibile utilizzare in modo

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

O almeno questa è la teoria. Non ne ho ancora avuto bisogno ;-)

Dovrebbe essere supportato anche da Laravel 4.

Problemi correlati