مصطفی
3 سال پیش توسط مصطفی مطرح شد
2 پاسخ

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

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

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

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


ثبت پرسش جدید
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

@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 3 سال پیش مطرح شد
0

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

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

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


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

@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;
});

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

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