في 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();
المثال المقدم هو توضيح مباشر لكيفية هيكلة المنطق داخل النموذج. ومع ذلك، يمكن توسيع نطاق هذا النهج وتكييفه لاستيعاب سيناريوهات أكثر تعقيدًا. ومن خلال الاستفادة من هذه الهياكل، يمكننا إدارة واستخلاص المنطق المعقد بكفاءة، مما يضمن بقاء نماذجنا منظمة وقابلة للصيانة وقابلة للتطوير مع تزايد تعقيدها.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3