2017-09-25 86 views
0

所以我有兩種模型,客戶端和項目,客戶端與項目有許多關係。我只是試圖將客戶端的項目計數添加到JSON響應中,但我無法使其工作。添加withCount到集合json

我的控制器只是返回所有的項目;

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'); 
} 

這只是將client_projects_count添加到響應,但它是一個空數組。我很接近,如果我dd($this->withCount('clientProjects')->get())我可以看到client_projects_count與正確的計數,但如果我刪除dd並保留->get()然後我得到一個內部服務器錯誤。

此外,它可能只加載這個爲index()方法而不是每一個?

回答

0

Documentation

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

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

因此,無論最後兩行中的'getClientProjectsCountAttribute'去? '$ client'從哪裏來?我嘗試將它改爲'$ this',併爲$ client-> with和'return $ client-> withCount(')調用未定義的方法Illuminate \\ Database \\ Query \\ Builder :: all()項目') - > get();'最後一行 – KeironLowe

+0

@KeironLowe您需要一個客戶端或客戶端列表的projectCount? –

+0

客戶列表,我正在列出所有客戶,並且想要添加客戶擁有的項目數量 – KeironLowe

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; 
}