如何在Laravel中计算列中的特定数据



我有两个模型,一个是Employees,另一个是Skill。一个员工可以拥有多种技能。现在,我试图在技能视图页面中显示拥有每项连续技能的员工数量。

我的技能视图页面:

<tbody>
@foreach ($skills as $skill)
<tr>
<th scope="row">{{ $loop->index+1 }}</th>
<td>{{ $skill->skill_name }}</td>
<td>{{ $skill->totalEmp($skill->id) }}</td>
<td style="width: 25%;">
<button class="btn btn-outline-danger" type="button" title="Delete Skill">Delete Skill</button>
</td>
</tr>
@endforeach
</tbody>

技能模型:

class Skill extends Model
{

use HasFactory;
protected $fillable = [
'skill_name'
];
public function Employee()
{
return $this->hasMany(Employees::class, 'skill_id', 'id');
}

public function totalEmp($id){
return Employees::where('status', 1)->where('skill_id','=',$id)->count();
}

}

员工模式:

class Employees extends Model

{使用HasFactory;

protected $guarded = [];
protected $table = 'employees';
public function Skills(){
return $this->hasMany(Skill::class);
}
}

员工表具有->skill_id,其他不敬字段||技能模型有->id和skill_name字段。

您可以为此使用withCount方法。

https://laravel.com/docs/9.x/eloquent-relationships#counting-相关型号

在您的Skill模型上,您定义了Employee关系。

所以你可以做这样的事情:

$skills = Skill::withCount(['Employee'])->get();
// Prints out number of employees that posses first skill
echo $skills[0]->employee_count;

当然,您可以使用for循环迭代$skills,或者foreach和类似的循环,甚至可以使用集合方法。

<tbody>
@foreach ($skills as $skill)
<tr>
<th scope="row">{{ $loop->index+1 }}</th>
<td>{{ $skill->skill_name }}</td>
<td>{{ $skill->employee_count }}</td>
<td style="width: 25%;">
<button class="btn btn-outline-danger" type="button" title="Delete Skill">Delete Skill</button>
</td>
</tr>
@endforeach
</tbody>

如果你仍然想使用你的方法totalEmp,你可以这样修改:

public function totalEmp(){
return $this->employee()->count();
}

我强烈建议的另一件事是确保你正确地命名你的模特和关系。

模型的名称应类似于:SkillEmployee关系应命名为:employees()skills()

请参阅此处的示例:https://laravel.com/docs/9.x/eloquent-relationships#many-到许多

相关内容

  • 没有找到相关文章

最新更新