البرمجة

تحويل استعلام SQL إلى DQL في Symfony: دليل عملي

في عملية تحويل استعلام SQL إلى Doctrine DQL في Symfony، يُعد هذا تحدٍ قد يواجه العديد من المطورين، خاصةً عند وجود علاقات معقدة بين الجداول. في حالتك، يبدو أن لديك 3 جداول، وعلاقتين، إحداهما هي many-to-many والأخرى هي one-to-many.

لتحقيق النتائج المأمولة في Symfony باستخدام Doctrine، يمكنك استخدام QueryBuilder أو DQL وفقًا للحاجة. فيما يلي مثال على كيفية تحويل الاستعلام الخاص بك إلى DQL:

php
$query = $entityManager->createQuery( 'SELECT r FROM App\Entity\Restaurant r LEFT JOIN r.foods f WHERE f.name LIKE :foodName GROUP BY r.name' )->setParameter('foodName', '%pizza%'); $results = $query->getResult();

في هذا المثال، يتم استخدام DQL لاسترجاع البيانات المطلوبة من الجداول المحددة. يتم التلاعب بالكائنات المستخدمة في Doctrine بدلاً من الجداول المباشرة. يتم فرز النتائج وفقًا لاسم المطعم باستخدام “GROUP BY”.

يمكنك أيضًا استخدام QueryBuilder لتحقيق الهدف نفسه. فيما يلي مثال على كيفية استخدام QueryBuilder:

php
$queryBuilder = $entityManager->createQueryBuilder(); $query = $queryBuilder ->select('r') ->from('App\Entity\Restaurant', 'r') ->leftJoin('r.foods', 'f') ->where($queryBuilder->expr()->like('f.name', ':foodName')) ->groupBy('r.name') ->setParameter('foodName', '%pizza%') ->getQuery(); $results = $query->getResult();

تأكد من استبدال ‘App\Entity\Restaurant’ بالنسبة للكائن الخاص بك وتكامل الاستعلام وفقًا لبياناتك الفعلية.

المزيد من المعلومات

عند العمل مع Symfony وDoctrine، يتيح لك الاستعلام بلغة DQL (Doctrine Query Language) أو استخدام QueryBuilder الوصول إلى قاعدة البيانات بشكل فعال وبشكل موجه كائن. يعتبر DQL مشابهًا للSQL، ولكنه يستهدف الكائنات بدلاً من الجداول.

في Symfony، يتم التعامل مع عمليات قاعدة البيانات من خلال Doctrine ORM (Object-Relational Mapping)، الذي يقوم بتحويل الكائنات إلى سجلات في قاعدة البيانات بشكل تلقائي.

في الاستعلام الذي قدمته، يتم اختيار جميع المطاعم (Resturant) التي تحتوي على أطعمة (Food) تحمل اسمًا يحتوي على “pizza”. يتم ذلك عبر استخدام LEFT JOIN بين جدول المطاعم وجدول الأطعمة باستخدام معرِّف المطعم (resturant_id). ثم يتم تصفية النتائج باستخدام شرط WHERE حيث يجب أن يحتوي اسم الطعام على “pizza”. أخيرًا، يتم تجميع النتائج حسب اسم المطعم باستخدام GROUP BY.

عند تحويل هذا الاستعلام إلى DQL في Symfony، يتم استخدام الكود الذي قدمته في الرد السابق. الكود يستخدم الـEntityManager لإنشاء استعلام DQL يعكس نفس الفحص الذي أجريته في الاستعلام الأصلي.

تأكد من تعديل الأمثلة لتناسب هيكل الكائنات والأسماء الفعلية في تطبيق Symfony الخاص بك. يمكن أن تساعدك هذه العملية في استرجاع البيانات بشكل فعال وفعّال مع مكتبة Doctrine ORM.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر