選項1
創建兩個不同的關係:
public function relationship1()
{
return $this->hasMany('App\Model')->where('type', 1);
}
public function relationship2()
{
return $this->hasMany('App\Model')->where('type', 2);
}
,並利用它們:
Model::where('types_id', $specialism_id)->withCount(['relationship1', 'relationship2'])
選項2
創建withCount()
類似方法將建立財產與自定義名稱:
public function withCountCustom($relations, $customName)
{
if (is_null($this->query->columns)) {
$this->query->select([$this->query->from.'.*']);
}
$relations = is_array($relations) ? $relations : func_get_args();
foreach ($this->parseWithRelations($relations) as $name => $constraints) {
$segments = explode(' ', $name);
unset($alias);
if (count($segments) == 3 && Str::lower($segments[1]) == 'as') {
list($name, $alias) = [$segments[0], $segments[2]];
}
$relation = $this->getHasRelationQuery($name);
$query = $relation->getRelationCountQuery(
$relation->getRelated()->newQuery(), $this
);
$query->callScope($constraints);
$query->mergeModelDefinedRelationConstraints($relation->getQuery());
$column = $customName; <---- Here you're overriding the property name.
$this->selectSub($query->toBase(), $column);
}
return $this;
}
並使用它:
Model::where('types_id', $specialism_id)
->withCountCustom(['requests' => function ($query) {
$query->where('type', 1);
}], 'typeOne')
->withCountCustom(['requests' => function ($query) {
$query->where('type', 2);
}], 'typeTwo')
選項1完美。非常感謝阿列克謝。 – Ben