2013-05-11 3 views
0

에 정의되어 있지 않은 나는 몇 가지 관련 모델을 가지고 :방법은 쿼리 클래스

Client 
id, name, user_id ++ 

Projects 
id, title, client_id, user_id ++ 

Users 
id, name ++ 

클라이언트는 사용자에게 속하고 클라이언트가 많은 프로젝트를 가지고 있으며, 프로젝트는 클라이언트와 사용자에 속한다.

나는 클라이언트의 프로젝트를 얻을 수있는 다음과 같은 쿼리를 시도

, 나는

Method [projects] is not defined on the Query class.

이 무슨 뜻 이죠 말하는 오류가? 이 같은

Client::find(2)->projects 

내 모델은 간단하고 같습니다 :

Client::find(2)->where('user_id', '=', Auth::user()->id)->projects() // Throws error 
Client::where('id', '=', 2)->where('user_id', '=', Auth::user()->id)->projects() // Also throwing an error 

다음 쿼리는 완벽하게 작동합니다 :

<?php 

class Client extends Eloquent 
{ 
    public static $timestamps = TRUE; 

    public function user() 
    { 
     return $this->belongs_to('User'); 
    } 

    public function projects() 
    { 
     return $this->has_many('Project'); 
    } 
} 

class Project extends Eloquent 
{ 
    public static $timestamps = TRUE; 

    public function client() 
    { 
     return $this->belongs_to('Client'); 
    } 

    public function user() 
    { 
     return $this->belongs_to('User'); 
    } 
} 

class User extends Eloquent 
{ 
    public static $timestamps = TRUE; 

    public function clients() 
    { 
     return $this->has_many('Client'); 
    } 

    public function projects() 
    { 
     return $this->has_many('Project'); 
    } 
} 

원 왜

나는 다음과 같은 쿼리를 시도했습니다 Where 절을 사용할 때 작동합니까? where 절을 사용하지 않을 때 작동하지만 user_id에서 프로젝트와 클라이언트를 필터링해야합니다. (내 계획은 회사에 연결된 여러 사용자가 모든 프로젝트와 클라이언트를 볼 수 있도록하는 것입니다.)

+1

어쩌면 그것은이다 ,이게 아니야? – rMX

답변

2

당신은 실제로 쿼리에서 아무것도 검색하지 않습니다, 단지 first()을 추가하거나 다음 루프를 get()을 추가하고 projects()를 호출합니다.

은 다음과 같이 작동합니다 :

Client::where('id', '=', 2)->where('user_id', '=', Auth::user()->id)->first()->projects() 

그리고 당신의 의견에 따르면, 단일 행에 대해 너무 작동합니다 : 방법은 '어디에'클래스 쿼리의 새로운 인스턴스를 반환하기 때문에

Client::find(2)->projects()->where('user_id', '=', Auth::user()->id); 
+0

Laravel 포럼에서 또 다른 답을 얻었습니다 :'Client :: find (2) -> projects() -> 여기서 'user_id', '=', Auth :: user() -> id)'어느 것이 될 것입니까 가장 효과적인? –

+0

한 행만 가져 오려면 둘 다 작동해야합니다. – Usman

+0

좋아, 고마워. :) –