محمد لارافيل نشر 23 مارس 2023 أرسل تقرير مشاركة نشر 23 مارس 2023 لدي جدول post ولديه علاقة many to many بجدول category ، وبالطبع جدول وسيط بينهما. أحاول الحصول على جميع المنشورات التي تتطابق مع مصفوفة من category ، على سبيل المثال: category_array = [food, travel, people] لذا ، أريد كل المنشورات التي تحتوي على كل تلك الفئات داخل المصفوفة. لقد جربت هذا لكنني لم ينجح $query->when( $filters['category'] ?? false, function ($query, $category) { $query->whereHas('categories', function ($query) use($category){ $query->whereIn('name', $category); }); } ); لقد جلب فقط المنشورات التي تحتوي على واحد منهم. واريد فقط المنشور الذي يحتوي على جميع الفئات وليس واحدا فقط. جربت هذا أيضا لكن لم ينجح كذلك: $query->when( $filters['category'] ?? false, function ($query, $categories) { $query->whereHas('categories', function ($query) use ($categories) { foreach ($categories as $cater) { $query->where('name', $cater); } }); } ); هل يمكنكم مساعدتي؟ اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Asem Mohamed نشر 23 مارس 2023 أرسل تقرير مشاركة نشر 23 مارس 2023 لعمل هذا انت تحتاج أمر SQL شائع جدا وهو WHERE IN ويمكن تحقيقه ب لارافل عن طريق دالة whereIn حيث تجلب اي بيانات تتطابق مع اي من المصفوفة التي تممرها لها يمكنك اعادة كتابة الكود كالتالي <?php $categories = ['food', 'cars', 'technology']; $posts = Post::whereHas('categories', function($query) use ($categories) { $query->whereIn('category_name', $categories); })->get(); هنا عملنا جلب لاي بوست له علاقة مع الجدول categories ثم انشأنا query لعمل whereIn حيث نجلب اي post له علاقة مع category يكون اسمه احد الاسماء المعدة سلفا في المصفوفة اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
محمد لارافيل
لدي جدول post ولديه علاقة many to many بجدول category ، وبالطبع جدول وسيط بينهما.
أحاول الحصول على جميع المنشورات التي تتطابق مع مصفوفة من category ، على سبيل المثال:
category_array = [food, travel, people]
لذا ، أريد كل المنشورات التي تحتوي على كل تلك الفئات داخل المصفوفة.
لقد جربت هذا لكنني لم ينجح
$query->when( $filters['category'] ?? false, function ($query, $category) { $query->whereHas('categories', function ($query) use($category){ $query->whereIn('name', $category); }); } );
لقد جلب فقط المنشورات التي تحتوي على واحد منهم. واريد فقط المنشور الذي يحتوي على جميع الفئات وليس واحدا فقط.
جربت هذا أيضا لكن لم ينجح كذلك:
$query->when( $filters['category'] ?? false, function ($query, $categories) { $query->whereHas('categories', function ($query) use ($categories) { foreach ($categories as $cater) { $query->where('name', $cater); } }); } );
هل يمكنكم مساعدتي؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.