اذهب إلى المحتوى

السؤال

نشر

لدي جدول 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);
                    }
                });
            }

        );

هل يمكنكم مساعدتي؟

Recommended Posts

  • 0
نشر

لعمل هذا انت تحتاج أمر 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 يكون اسمه احد الاسماء المعدة سلفا في المصفوفة

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...