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، وذلك لسببين:

  • جعل الكود أقصر.
  • حعل الكود أسهل للتعديل.

عند التعديل عوضا أن نقوم بالتعديل في أكثر من مكان، فقط يجب التعديل في مكان واحد فقط.

للمزيد عن Query Scopes من خلال هذا المقال.