2017-09-25 1 views
0

그래서 두 개의 모델, 클라이언트 및 프로젝트가 있고 클라이언트에는 프로젝트와 hasMany 관계가 있습니다. 나는 클라이언트에 대한 프로젝트 수를 JSON 응답에 추가하려고 시도하고 있지만 작동시킬 수는 없다.컬렉션 json에 withCount 추가하기

컨트롤러가 모든 프로젝트를 반환합니다.

public function index(Client $client) 
{ 
    return $client->all(); 
} 

내 모델에 다음이 포함되어 있습니다.

protected $appends = ['client_projects_count']; 


/** 
* Create a relationship between this client and it's projects 
*/ 
public function clientProjects() { 
    return $this->hasMany('App\Project'); 
} 

public function getClientProjectsCountAttribute() 
{ 
    return $this->withCount('clientProjects'); 
} 

이 경우 응답에 이 추가되지만 빈 배열입니다. 나는 dd($this->withCount('clientProjects')->get())이 맞다면 정확한 수의 client_projects_count를 볼 수 있지만, dd을 제거하고 ->get()을 유지하면 내부 서버 오류가 발생한다.

또한이 코드는 모든 코드가 아닌 index() 메서드에서만로드 할 수 있습니다. 내가 더 좋은 방법은 자신의해야 확신 있지만 Documentation

$clients = Client::withCount('projects')->get(); 

foreach ($clients as $client) { 
    echo $client->projects_count; 
} 

답변

0

그래서 나는 그것을 자신을 해결하기 위해 관리.

Client.php

protected $appends = ['client_projects_count']; 


/** 
* Create a relationship between this client and it's projects 
*/ 
public function clientProjects() { 
    return $this->hasMany('App\Project'); 
} 

public function clientProjectsCount() 
{ 
    return $this->clientProjects()->selectRaw('client_id, count(*) as aggregate')->groupBy('client_id')->get(); 
} 

public function getClientProjectsCountAttribute() 
{ 
    return isset($this->clientProjectsCount()[0]) ? $this->clientProjectsCount()[0]->aggregate : 0; 
} 
+0

그래서 마지막 두 줄 중 하나는'getClientProjectsCountAttribute' 갈? '$ client'는 어디에서 오는 것입니까? 나는 $ this-> this로 변경하려고 시도하고 $ client-> with 및 $ return-> withCount (')를 사용하여'정의되지 않은 메소드 호출 '을 \\ Database \\ Query \\ Builder :: all() projects ') -> get();'마지막 줄 – KeironLowe

+0

@KeironLowe 하나의 클라이언트 또는 클라이언트 목록에 대해 projectCount가 필요합니까? –

+0

고객 명단, 모든 고객을 열거하고 있고 고객이 가지고있는 프로젝트의 양을 더하고 싶습니다 – KeironLowe