تا ۶۰ درصد تخفیف شگفت انگیز نوروزی! (‌ آخرین فرصت )

اطلاعات بیشتر..
ثانیه
دقیقه
ساعت
روز
محمد رضا وحدت
3 ماه پیش توسط محمد رضا وحدت مطرح شد
1 پاسخ

Query Builder با afterQuery و pagination

نسخه لاراول ۱۱.۳۰
نسخه PHP8.3.13
من سعی می‌کنم از متد afterQuery با Query Builder استفاده کنم، اما زمانی که از صفحه‌بندی (pagination) استفاده می‌کنم، مشکلاتی پیش می‌آید.
کد زیر را در نظر بگیرید:

DB::table('users')
    ->afterQuery(fn (Collection $users) => $users->map(function (stdClass $user)
    {
        $user->name = $user->name . ' last name';

        return $user;
    }))
    ->paginate()

خطای زیر به دست می‌آید:
Undefined property: stdClass::$name
اما اگر به جای استفاده از متد ->paginate() از ->get() استفاده کنم، کد درست عمل می‌کند.

کسی میدونه مشکل کد من چیه؟


ثبت پرسش جدید
سجاد حسین زاده
تخصص : Full-Stack Developer
@sajjadhosseinzadeh 2 هفته پیش آپدیت شد
0

سلام، وقتتون بخیر

ببینید مشکل از اینجاست که متد afterQuery فقط روی get() کار می‌کند و با paginate() سازگار نیست. دلیل این موضوع نحوه‌ی پردازش داده‌ها در paginate() است.
به جای استفاده از afterQuery، می‌توانید بعد از paginate() داده‌ها را پردازش کنید:

$users = DB::table('users')->paginate();

$users->getCollection()->transform(function ($user) {
    $user->name = $user->name . ' last name';
    return $user;
});

پس در نتیحه
afterQuery فقط روی get() کار می‌کند.
برای paginate() باید از getCollection()->transform() استفاده کنید.

با این روش، صفحه‌بندی درست کار خواهد کرد و مقدار name نیز تغییر می‌کند.


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

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