راکت

حذف یک mutator در eagerload

9 پاسخ

سلام دوستان به یه موردی برخوردم لطفا اگه کسی میدونه حتما کمک کنه که برام مهمه.
یه mutator دارم که اسمش user_full_name هست تا نام و نام خانوادگی کاربر رو کنار هم نمایش بده.
همه جای سایت ازش استفاده میکنم جز یه جا که نمیخوام کار کنه.
حالا من این کد رو نوشتم:

return response()->json(Auth::user()->orders()
->with(['user' => function($q){ $q->first()->setAppends([]); })

داخل خود کالکشن اعمال میشه اما تو جواب دوباره نام و نام خانوادگی رو برمیگردونه!لطفا کمکم کنید

ثبت پرسش جدید

پاسخ‌ها

9
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

از map استفاده کنید و کلید مورد نظر رو حذف کنید یا به دلخواه تغییر بدید.

$multiplied = $collection->map(function ($item, $key) {
    unset($item['userFullName']);
    return $item;
});
pari.a
pari.a
@pari.a

خب اینجوری اون ساختاری که برمیگردونم به هم میخوره
چون یه api هست روی گوشی و به هیچ وجه نمیخوام چیزی به هم بریزه
اگه اشتباه میکنم لطفا جزیی تر رومثالم توضیح بدید
@khanzadimahdi

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

hamed
hamed
@shojai80

سلام. این مشکلو منم دارم. کسی راه حلی براش داره ؟

علی بیات
علی بیات
@ali.bayat

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

تو کنترلر API یه متد بساز و داخلش با array_map فقط گزینه هایی رو که میخواهی برگردون.
نمیشه که ما کل ساختار دیتا بیس رو بصورت json به کاربر بدیم.. اگر لازم باشه این کارو میکنیم اما در غیر این‌ صورت تمرین خوبی برای ساخت API نیست

hamed
hamed
@shojai80

@ali.bayat
من برای api نمی خوام. در بدنه سایتم در یک جا نمی خوام mutator کار کنه. همه جا تاریخ رو شمسی میکنه ولی یک جا نمی خوام این اتفاق بیفته

علی بیات
علی بیات
@ali.bayat

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

@shojai80

توضیحات بالا مربوط به این تاپیک بود. سوال شما کمی فرق داره.

میتونی توی مدل یه پراپرتی تعریف کنی.. که پیش فرض مقدارش true باشه. مثلا:

public $persianDate = true;

بعد داخل mutator چک میکنی.

  • اگر مقدار پراپرتی true بود که تاریخ شمسی رو برمیگردونی
  • اگر false بود، خود مقدار اصلی تاریخ رو بر میگردونی

حالا جایی که نمیخواهی تاریخ شمسی بشه مدل رو بصورت دستی Instantiate میکنی (نمونه سازی میکنی)

$post = new Post;
$post->persianDate = false;
$post->date = Carbon::now();

echo $post->date;

یا اینکه میتونی Accessor های جدا درست کنی

TEFO
TEFO
@tefo.ha27

تخصص: لاراول

یه متد وجود داره به اسم getOriginal به این صورت میتونین استفاده کنین

$user->getOriginal()

اینجوری فقط رکورد های مدل رو دریافت میکنه

hamed
hamed
@shojai80
hamed
hamed
@shojai80

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

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