Bad Practice Example
// Controller Code
public function index()
{
$users = User::whereNotNull('activated_at')->select('name', 'email')->get();
}
public function show(int $userId)
{
$user = User::whereNotNull('activated_at')->findOrFail($userId);
}
public function edit(int $userId)
{
$user = User::whereNotNull('activated_at')->findOrFail($userId);
}What To Do Instead
// app/Models/User.php:
public function scopeActive($query)
{
return $query->whereNotNull('activated_at');
}
// Controller Code:
public function index()
{
$users = User::active()->select('name', 'email')->get();
}
public function show(int $userId)
{
$user = User::active()->findOrFail($userId);
}
public function edit(int $userId)
{
$user = User::active()->findOrFail($userId);
}التوضيح
إذا كان لدينا شرط مكرر في أكثر من مكان، فمن الأفضل إستخدام Scope، وذلك لسببين:
عند التعديل عوضا أن نقوم بالتعديل في أكثر من مكان، فقط يجب التعديل في مكان واحد فقط.