راکت
حل شده

مخفی کردن Accessor در یک کوئری خاص

2 پاسخ

سلام
برای یسری محاسبات خاص accessor تعریف کردم و این رو جاهای خاص نمایش می دم حالا تو یه کوئری می خوام مخفی کنم وقتی مخفی می کنم paginate رو حذف می کنه

        $data = Invoice::where($where)
        ->orderBy('id', 'DESC')
        ->paginate($request->size)->makeHidden(['field1', 'field2', 'field3']);

روشی هست که هم accessor مخفی بشه هم paginate سر جاش بمونه

مصطفی
مصطفی
@m.fartaj
ثبت پرسش جدید

پاسخ‌ها

2
مهران مرندی
مهران مرندی
@mehranmarandi

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

بهترین پاسخ

@m.fartaj

$data = Invoice::where($where)
    ->orderBy('id', 'DESC')
    ->paginate($request->size);
$data->getCollection();
$data->transform(function ($row) {
        $hiddens = ['field1','field2','field3'];
        $row = array_diff_key($row->toArray(),array_flip($hiddens));
        return $row;
});
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

۲ راه کلی به نظرم میرسه

۱. استفاده کردن از کلاس های Resource که کارشون Transformation داده هاست
۲. استفاده از متد select و سلکت کردن فیلد ها به صورت دستی

گزینه اول و makeHidden یک مشکل مشترک دارند.. اون هم اینکه ابتدا داده ها رو کامل میگیرند و سپس بر حسب نیاز اون ها رو فیلتر میکنند.. یعنی کوئری که اجرا میشه همه موارد رو میگیره و بعد فیلتر انجام میشه که در مقیاس بالا روی پرفرمنس اثر میگذاره

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

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

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