Scope trong Laravel hoạt động như thế nào?

Có một vấn đề em chưa hiểu rõ trong cách hoạt động của scope trong laravel, mọi người giúp đỡ với ạ. (local scope) khi khai báo method trong model phải có tiền tố scope phía trước, không có scope không gọi được method. Em muốn hỏi cơ chế trong laravel xử lý điều này như thế nào và ở đâu ạ? Em cũng mới lập trình chưa lâu nên nếu câu hỏi chưa rõ ràng, khó hiểu, mọi người thông cảm và góp ý giúp em.
Cảm ơn cả nhà.

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Scope a query to only include popular users.
     *
     * @param \Illuminate\Database\Eloquent\Builder    $query
     * @param \Illuminate\Database\Eloquent\Builder
     */
    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    /**
     * Scope a query to only include active users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder   $query
     * @return \Illuminate\Database\Eloquent\Builder

Nếu bạn hỏi về “cách hoạt động” thì Laravel sử dụng khá nhiều magic method, tiền tố scopeMethod sẽ được thực thi khi method được gọi, trong PHP cách thức này thường được thực thi bằng cách overloading methods __call hay __callStatic.

Cách thức hoạt động khá đơn giản, mỗi khi instance gọi 1 method, __call sẽ kiểm tra method đó có tồn tại hay không, nếu tồn tại thì thực thi.

Xem thêm tại https://viblo.asia/p/php-magic-methods-la-gi-PaLkDymdvlX

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?