علیرضا مه آبادی
2 سال پیش توسط علیرضا مه آبادی مطرح شد
8 پاسخ

نحوه paginate نوتیفیکیشن های خوانده شده در دیتابیس

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

 public function NotificationsRead(User $user)
{

    $no = Auth::user()->readNotifications()->paginate(7)->latest()->get();
    return view('user-profile.notifications-read', compact('user', 'no'));
}

بعدش این ارور میده
که latest does not exist on this colloctions
وقتی latest بر می دارم به get گیر میده اینو خیلی سرچ کردم داخل اینترنت و استک اور فلو و از چندین روش رفتم به جواب نرسیدم
و این هم بگم که من دو نوع نوتیفیکیشن در جدول دیتا بیس دارم

از خیلی روش رفتم اما نتونستم صفحه بندی درست کنم
@mhyeganeh @gomnam @juza66
این روش رفتم و در کنترلر کد خاصی نزدم و همشو در Blade زدم paginate انجام میشه ولی هر اطلاعات تو هر صفحه به صورت تکراری انجام میده و فقط دکمه صفحه بندی ایجاد میشه و کل نوتیفیکیشن ها هی تو هر صفحه تکرار می شن.

   <h5 class="card-title">موضوع:</h5>
                            @foreach(auth()->user()->readnotifications->where('type','App\Notifications\NewReplySubmittedRoyal') as $notification)
                                <p class="card-text"><a
                                        href="{{$notification->data['UserProfile']}}">{{$notification->data['name']}}</a>
                                    یک پاسخ برای پرسش شما با محتوای:
                                    {{$notification->data['thread_title']}}
                                    در {{$notification->data['time']}}<br>ثبت کرد.
                                </p>
                                <form>

                                    <button type="submit" class=" btn btn-outline-success mb-2 ml-2"><a
                                            href="{{$notification->data['route']}}">لینک پرسش</a></button>
                                </form>
                                <hr>
                            @endforeach
                            {{--*********** نوع دوم نوتیفیکیشن--}}
                            @foreach (auth()->user()->readNotifications->where('type','App\Notifications\FollowerNotifications') as $notification)
                                <p class="card-text">{{$notification->data['name']}} یک پرسش با محتوای:
                                    {{$notification->data['thread_title']}}
                                    ایجاد کرد.
                                </p>

                                <a href="{{$notification->data['route']}}">لینک پرسش</a>
                                <hr>
                            @endforeach

                            {{auth()->user()->notifications()->paginate(3)->links()}}

ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
1

سلام
بعد از paginate نیاز به get کردن نداری خودش میگیره
latest رو هم باید قبل از paginate بیاری
اگر خطا داشت latest و paginate با هم میتونی از orderBy بر روی created_at استفاده کنی
تست کن موردی بود اطلاع بده عزیز


Saman
تخصص : برنامه نویس وب
@samanzdev 2 سال پیش مطرح شد
0

سلام
شما نیازی به متود latest و get ندارید فقط paginate رو قرار بدید و داخل تعداد دیتای برگشتی رو بنویسید، به این شکل :

$no = Auth::user()->readNotifications()->paginate(7)

اینم از مستندات لاراول
https://laravel.com/docs/8.x/pagination


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 2 سال پیش مطرح شد
0

@salar.mohammad2013 @samanzdev سپاس از شما مهندسان عزیز بنده این کارو کردم یعنی طبق چیزی که شما فرمودید

  $no = Auth::user()->readNotifications()->paginate(2);
        return view('user-profile.notifications-read', compact('user', 'no'));

صفحه بندی اعمال میشه ولی مثلا من کلا 4 تا نوتیفیکیشن دارم و 6 7 صفحه paginate ایجاد میشه و در هر صفحه همون 4 تا نوتیفیکیشن دائم تکرار میشه در هر صفحه (بنده دو نوع نوتیفیکیشن دارم) این هم کد Blade

 <div class="card-body">
                            <h5 class="card-title">موضوع:</h5>
                            @foreach(auth()->user()->readnotifications->where('type','App\Notifications\NewReplySubmittedRoyal') as $notification)
                                <p class="card-text"><a
                                        href="{{$notification->data['UserProfile']}}">{{$notification->data['name']}}</a>
                                    یک پاسخ برای پرسش شما با محتوای:
                                    {{$notification->data['thread_title']}}
                                    در {{$notification->data['time']}}<br>ثبت کرد.
                                </p>
                                <form>
                                    <button type="submit" class=" btn btn-outline-success mb-2 ml-2"><a
                                            href="{{$notification->data['route']}}">لینک پرسش</a></button>
                                </form>
                                <hr>
                            @endforeach
                            {{--*********** نوع دوم نوتیفیکیشن--}}
                            @foreach (auth()->user()->readNotifications->where('type','App\Notifications\FollowerNotifications') as $notification)
                                <p class="card-text">{{$notification->data['name']}} یک پرسش با محتوای:
                                    {{$notification->data['thread_title']}}
                                    ایجاد کرد.
                                </p>

                                <a href="{{$notification->data['route']}}">لینک پرسش</a>
                                <hr>
                            @endforeach
                            {{$no->links()}}
{{--                            {{$no->render()}}      OR --}}  

Saman
تخصص : برنامه نویس وب
@samanzdev 2 سال پیش مطرح شد
0

میشه یه عکسی از جدولتون بفرستید؟


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

داداش مشخصه دلیلش
شما اومدی $no رو توی کنترلر خودت مقدار دهی کردی به صورت paginate
درست تا اینجا
متغییری ک قراره مثلا 2 مورد رو فقط برگردونه ازش استفاده ای نکردی توی ویو
و اومدی دوباره از دیتابیس فراخونی کردی توی حلقه و همه ی پیام هات رو دریافت کردی و نمایش دادی
عملا کد paginate اولت الکیه
توی حلقه به جای کد زیر

@foreach(auth()->user()->readnotifications->where('type','App\Notifications\NewReplySubmittedRoyal') as $notification)

از کد زیر استفاده کن

@foreach($no as $notification)

کلا وقتی یه داده ای رو یه بار از دیتابیس دریافت میکنی سعی کن از همون استفاده کنی و هر بار درخواست به سرور ندی چون هم بار سرور زیاد میشه هم سایتت کند تر بالا میاد
جدای از این که کلا اینجا اشتباه بوده دریافت دوباره ی دادت توی حلقه مطرح کردم موضوع رو.


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 2 سال پیش مطرح شد
0

@samanzdev اگر منظورتون دیتابیسه بفرمایید
توضیح تصویر رو وارد کنید

خیلی سر این مبحث اذیت شدم یک هفتس


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 2 سال پیش مطرح شد
0

@salar.mohammad2013 مهندس این چیزی که شما می فرمایید هم چند بار انجام داد ولی اون موقع اینارو دیگه نمیشناسه

  href="{{$notification->data['UserProfile']}}">{{$notification->data['name']}}</a>

 {{$notification->data['thread_title']}}

{{$notification->data['name']}}

چون هر کدومشون برای دو نوع نوتیفیکیشن هست


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش آپدیت شد
0

ببین داداش
شما نیاز به دو داده ی متفاوت داری که هر داده هم paginate بشه واست
پس نیاز به دو فراخوانی داده ی مجزا هم برای این دو داری چون داده هات کلا جدا هستن
نمیشه یک paginate رو برای هر دو استفاده کنی چون بی معنیه
یک داده ی شما از NewReplySubmittedRoyal و دیگری از FollowerNotifications هست
هر دو رو توی کنترلر به صورت مجزا paginate کن و مثلا $no1 و $no2 به blade ارسال کن

خلاصه شما داده ای که فرستادی به ویو رو استفاده نکردی ازش خطای اول شماست
خطای دومتون هم اینه ک با یک paginate دو تا حلقه که دو چیز مختلف رو با تعداد مختلف بازگشت میدن میخوایی paginate کنی


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

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