2014-09-11 10 views
5

Hi chcę odzyskać moje projects przechowywane w db, które są w posiadaniu auth user który tworzy również clients (mają wiele projektów i zadań) i tasks (należy do projekt i zadania oraz użytkownik).laravel wymowne relacje z i gdzie klauzuli na podstawie zagranicznego kolumnie

Chcę pobrać wszystkie zadania, które nie są oznaczone jako zamknięte w tabeli stanu, wiem id to 2 i mogę odbierać to jako tak:

public function getOpenProjects() { 

    return \Project::with(['clients', 'tasks', 'status']) 
     ->where('status_id', '!=', '2') 
     ->whereUserId(Auth::user()->id) 
     ->get(); 
} 

Ale jak mogę to zmienić zapytać o kolumnę w tabeli statusów, tj. kolumnę nazwy w tej tabeli?

Odpowiedz

16

Możesz spróbować tego:

$value = 'someName'; 
Project::with(['clients', 'tasks', 'status' => function($q) use($value) { 
    // Query the name field in status table 
    $q->where('name', '=', $value); // '=' is optional 
}]) 
->where('status_id', '!=', '2') 
->whereUserId(Auth::user()->id) 
->get(); 

Również można spróbować to (będzie pobierać rekordy tylko wtedy, gdy query powraca name chcesz, w przeciwnym razie nic):

$value = 'someName'; 
Project::with(['clients', 'tasks', 'status']) 
     ->whereHas('status', function($q) use($value) { 
     // Query the name field in status table 
     $q->where('name', '=', $value); // '=' is optional 
}) 
->where('status_id', '!=', '2') 
->whereUserId(Auth::user()->id) 
->get(); 
+0

Chcę zapytać o pole nazwy tabeli statusu, a nie o tabelę projektów – 001221

+0

Tak, to jest '$ q-> where ('name', '=', $ value)' wewnątrz 'zamknięcia', które jest wartością' status'. –

+0

dlaczego pobiera stan z wartością null? – 001221

0

Możesz spróbować :

Project::with(['clients', 'tasks' => function($q) use($value) { 
// Query the name field in status table 
    $q->where('status_id', '!=', '2'); 
}]) 
->whereUserId(Auth::user()->id) 
->get(); 
Powiązane problemy