۵۰٪ تخفیف فقط تا پایان جشنواره؛ بعدش همه‌چیز به قیمت قبل برمی‌گرده!

مشاهده دوره‌ها
ثانیه
دقیقه
ساعت
روز
راکت
حل شده

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

6 پاسخ

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

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

ثبت پرسش جدید

پاسخ‌ها

6
Mohammad Amin Mokhtari
Mohammad Amin Mokhtari
@amin.mokhtari94

تخصص: برنامه نویس

بهترین پاسخ

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

    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
Mohammad Amin Mokhtari
@amin.mokhtari94

تخصص: برنامه نویس

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

Category::where('name','laravel')->firstOrFail()->posts
سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

@amin.mokhtari94

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

شاید پاسخ شما همین‌جا باشد

سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

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

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);
سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

@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

تخصص: برنامه نویس وب

@amin.mokhtari94

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

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

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