pari.a
5 سال پیش توسط pari.a مطرح شد
9 پاسخ

حذف یک mutator در eagerload

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

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

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


ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش آپدیت شد
0

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

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

pari.a
@pari.a 5 سال پیش آپدیت شد
0

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


hamed
@shojai80 4 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

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


hamed
@shojai80 4 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

@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.ha27 4 سال پیش مطرح شد
1

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

$user->getOriginal()

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


hamed
@shojai80 4 سال پیش مطرح شد
hamed
@shojai80 4 سال پیش مطرح شد

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

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