"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > خدعة بليغة: نموذج Laravel من الاستعلام الفرعي

خدعة بليغة: نموذج Laravel من الاستعلام الفرعي

تم النشر بتاريخ 2024-11-03
تصفح:656

Eloquent Trick: Laravel Model from Subquery

في Laravel، من الشائع تحديد الجدول المقابل للنموذج باستخدام خاصية الجدول، مثل:

class User extends Model {
  protected $table = 'users';
}

ومع ذلك، بدلاً من التعيين مباشرةً إلى جدول، يمكننا استخدام استعلام فرعي. تسمح لنا هذه التقنية بتغليف الاستعلامات المعقدة داخل طبقة التطبيق، تمامًا مثل إنشاء عرض قاعدة البيانات، ولكن مع المرونة الإضافية لعمليات Eloquent.

على سبيل المثال، فكر في جدول المستخدمين الذي يخزن معلومات حول كل من المسؤولين والمستخدمين العاديين. يمكننا إنشاء نموذج AdminUser باستخدام استعلام فرعي:

class AdminUser
{
    public function getTable(): string|\Illuminate\Contracts\Database\Query\Expression
    {
        $sql = User::query()
            ->select('id', 'name')
            ->where('admin_user', true)
            ->toRawSql();

        return DB::raw(sprintf('(%s) as admin_users', $sql));
    } 
}

يسحب هذا النموذج البيانات من استعلام فرعي (حدد المعرف، الاسم من المستخدمين حيث admin_user = 1)، مما يسمح لك بالاستعلام عنها تمامًا مثل النموذج القياسي:

AdminUser::query()->get();

أو

AdminUser::query()->first();

ومع ذلك، انتبه إلى أن بعض الاستعلامات، مثل find(1)، لن تعمل بشكل مباشر:

AdminUser::query()->find(1);

للتغلب على هذه المشكلة، يمكنك استخدام شرط المكان المدمج مع first():

AdminUser::query()->where('id', 1)->first();

خاتمة

المثال المقدم هو توضيح مباشر لكيفية هيكلة المنطق داخل النموذج. ومع ذلك، يمكن توسيع نطاق هذا النهج وتكييفه لاستيعاب سيناريوهات أكثر تعقيدًا. ومن خلال الاستفادة من هذه الهياكل، يمكننا إدارة واستخلاص المنطق المعقد بكفاءة، مما يضمن بقاء نماذجنا منظمة وقابلة للصيانة وقابلة للتطوير مع تزايد تعقيدها.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3