راکت

Query Builder با afterQuery و pagination

1 پاسخ

نسخه لاراول ۱۱.۳۰
نسخه 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() استفاده کنم، کد درست عمل می‌کند.

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

ثبت پرسش جدید

پاسخ‌ها

1
سجاد حسین زاده
سجاد حسین زاده
@sajjadhosseinzadeh

تخصص: Full-Stack Developer

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

ببینید مشکل از اینجاست که متد 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 نیز تغییر می‌کند.

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

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

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