سعید
5 سال پیش توسط سعید مطرح شد
6 پاسخ

انتخاب پست ها با حداقل یک دسته relashanship many to many

@ali.bayat @hossein.r.1442 @hesammousavi @milad @elyasbeshkani @juza66 @rezajashnsaz0011 @endworld @mohsenbostan @alireza.mzh @bahrami.nasrin90 و بقیه دوستان ..

سلام به همه دوستان
ببینید دوستان من بین post ها و category ها رابطه چند به چند ایجاد کردم.
حالا اگر در هنگام سرچ ، بخوام همه پست هایی که حداقل دسته ای مشخصی دارند رو از دیتابیس بگیر از چه دستوری می تونم استفاده کنم.
کار برام یخورده سخت شده چون ، هر پست ممکنه چندین دسته داشته باشه و در عین حال ما میخوایم پست هایی رو بگیریم که حداقل ، دسته ای رو که مشخص میکنیم داشته باشن.
مثلا فرض کنید کاربر دسته لاراول رو انتخاب میکنه ، باید پست هایی که حداقل دسته لاراول رو دارند رو بهش نشون بدیم.
ممنون میشم راهنمایی بفرمایید


ثبت پرسش جدید
Mohammad Amin Mokhtari
تخصص : برنامه نویس
@amin.mokhtari94 5 سال پیش آپدیت شد
1

بله
کد زیر رو امتحان کنید

    Post::whereHas('categories', function (Builder $query) {
        $query->whereIn('name', ['laravel','php']);
    })
    ->whereTitle('some title')
    ->whereType('some type')
    // ->Where Other Conditions
    ->paginate(10);
  • در این کد 'categories' نام جدول دسته بندی هاست
  • همانطور که می بینید می توان از چند دسته بندی نیز برای جستجو استفاده کرد که در این مثال 'laravel','php' آورده شده است
  • کد whereTitle('some title') مانند where('title','some title') یا where('title','==','some title') عمل می کند

Mohammad Amin Mokhtari
تخصص : برنامه نویس
@amin.mokhtari94 5 سال پیش مطرح شد
0

سلام
میتونید از قطعه کد زیر استفاده کنید:

Category::where('name','laravel')->firstOrFail()->posts

سعید
تخصص : برنامه نویس وب
@Saeeed 5 سال پیش مطرح شد
0

@amin.mokhtari94

آیا دقیقا نمیشه روی خود مدل post ، شرط رو قرار بدیم.
چون میخوام برای سرچ استفاده کنم و شروط دیگه ای هم هستن .
و تمامی شروط روی مدل post قرار گرفتن.


سعید
تخصص : برنامه نویس وب
@Saeeed 5 سال پیش مطرح شد
0

فرض کنید این کد ماست :

Post::whereApproved(2)
            ->when(\request()->get('type') , function ($q) {
                if (\request()->get('type') == 'like'){
                    $q->orderBy('like_view','desc');
                }
            })
            ->when(\request()->get('catId') , function ($q) {
                // درخواست کاربر برای دریافت پست هایی که حداقل دسته (فلان) را داشته باشن
            })->paginate(10);

Mohammad Amin Mokhtari
تخصص : برنامه نویس
@amin.mokhtari94 5 سال پیش آپدیت شد
1

بله
کد زیر رو امتحان کنید

    Post::whereHas('categories', function (Builder $query) {
        $query->whereIn('name', ['laravel','php']);
    })
    ->whereTitle('some title')
    ->whereType('some type')
    // ->Where Other Conditions
    ->paginate(10);
  • در این کد 'categories' نام جدول دسته بندی هاست
  • همانطور که می بینید می توان از چند دسته بندی نیز برای جستجو استفاده کرد که در این مثال 'laravel','php' آورده شده است
  • کد whereTitle('some title') مانند where('title','some title') یا where('title','==','some title') عمل می کند

سعید
تخصص : برنامه نویس وب
@Saeeed 5 سال پیش مطرح شد
0

@amin.mokhtari94
ممنون از پاسختون
من نمونه کد زیر رو اجرا کردم و با ارور برخورد کردم :

Post::whereApproved(2)
    ->when(\request()->get('type') , function ($q) {
        if (\request()->get('type') == 'new'){
            $q->orderBy('created_at','desc');
        }elseif (\request()->get('type') == 'old'){
            $q->orderBy('created_at','asc');
        }
    })
   ->when(\request()->get('catId') , function ($q) {
                $q->whereHas('category', function (Builder $query){
                    $query->whereId(request()->get('catId'));
                });
            })
->paginate(10);

نام تابع ralation من در مدل پست category هست برای همین، category نوشتم.
و باید بگم کاربر فقط id یک دسته را میفرستد.

ارور :

Argument 1 passed to App\Http\Controllers\Pages\PostsController::App\Http\Controllers\Pages\{closure}() must be an instance of Illuminate\Database\Query\Builder, instance of Illuminate\Database\Eloquent\Builder given, called in 

سعید
تخصص : برنامه نویس وب
@Saeeed 5 سال پیش مطرح شد
0

@amin.mokhtari94

اهااااا
اوکی ، ظاهرا Builder رو اشتباها use کرده بودم
واقعا ممنون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام