تا ۶۰ درصد تخفیف شگفت انگیز نوروزی! ( آخرین فرصت )
اطلاعات بیشتر..نسخه لاراول ۱۱.۳۰
نسخه 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() استفاده کنم، کد درست عمل میکند.
کسی میدونه مشکل کد من چیه؟
سلام، وقتتون بخیر
ببینید مشکل از اینجاست که متد 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 نیز تغییر میکند.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟