لأداء أفضل إستخدام join عوضا عن whereHas

لأداء أفضل إستخدام join عوضا عن whereHas

2024-05-15 وقت القراءه : 1 دقائق

Bad Practice Example

class Transaction extends Model
{
    public function category()
    {
       return $this->belongsTo(Category::class);
    }
}

class Category extends Model
{
    public function project()
    {
       return $this->belongsTo(Project::class);
    }
}

class TransactionController extends Controller
{
    public function index()
    {
        $transactions = Transaction::whereHas('category', function ($q) {
            $q->where('project_id', 1);
})->get();
}

What To Do Instead

class Transaction extends Model
{
    public function category()
    {
       return $this->belongsTo(Category::class);
    }
}

class Category extends Model
{
    public function project()
    {
       return $this->belongsTo(Project::class);
    }
}

class TransactionController extends Controller
{
    public function index()
    {
        $transactions = Transaction::select('trasnactions.*')
            ->join('categories', 'transactions.category_id', '=', 'categories.id')
            ->where('categories.project_id', 1)
            ->get();
}

اذا كان لديك مئات السجلات في قاعدة البيانات وتهتم بالأداء، يفضل إستخدام join عوضاً عن إستخدام whereHas


التعليقات
الحيان
منذ سنة

حاليا لدي استعلامات قاعدة البيانات مع ثلاث علاقات استخدم join لكن الاداء جد ضعيف وقت تنفيذ الاستعلام يزيد عن 10 ثواني علما ان الاستعلامات تضم aggravate functions

إضافة تعليق
Loading...