راکت

خالی بجای null

5 پاسخ

سلام و وقت بخیر.
دوستان مثلا اینپوت خالی وقتی برمیگرده و ذخیره میکنم بجای اینکه null بشه خالی ذخیره میکنه.
و این مشکل unique بودن یوزرنیم اینارو بهم میریزه.

بعد این مورد توی لوکالم اوکیه و null ثبت میشه. ولی روی هاست مشکل داره

لاراول ورژن 8 - php 8

یجوری که من هر شرط isnull نوشتم دیگه کار نمیکنه و باید empty() بذارم.
اینو ممنون میشم راهنمایی کنید دلیل این تفاوت چیه در لوکال و هاست.

@rezajahangir @mhyeganeh @juza66 @intellect.circle @hesammousavi @ali.bayat

ثبت پرسش جدید

پاسخ‌ها

5
محمد رستمی
محمد رستمی
@mohammadphp

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

سلام اینو به کدت اضافه کن ببین کار میکنه

foreach($request as $val){
if ($val ===null){
$val = null
}
}

تست نکردم

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

اول از همه لازمه بدونیم که بصورت پیش فرض باید همین اتفاق بیفته. یعنی اگر input خالی بود باید بجای null یک رشته empty ثبت بشه.

اما لاراول یک Middleware داره بنام ConvertEmptyStringsToNull که بصورت اتومات روی تمامی درخواست ها اجرا میشه و و همون طور که از اسمش مشخصه عبارات خالی رو به null تبدیل می‌کنه.

اگر وارد فایل app/Http/Kernel.php بشید زیرمجموعه property با عنوان middleware$ باید چنین آدرسی رو مشاهده کنید:

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class

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

قضیه بعدی هم اینکه چک کنید آیا ساختار دیتابیس و جدول مورد نظرتون در نسخه لوکال و production با هم یکسان هستند یا نه. به خصوص اینکه آیا اون ستون خاص nullable تعریف شده یا نه و مقدار default شون آیا بروی null تعریف شده یا نه.


@mohammadphp
متوجه منظورتون از این عبارت نمیشم و کمی عجیب به نظرم میرسه:

if ($val ===null){
    $val = null
}

میشه بیشتر توضیح بدید و یک مثال بزنید که قرار هست این کد چه کاری انجام بده دقیقا؟

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

Ali
Ali
@ali200316

ممنون از شما، بله توی میدلور ها فعاله

و دیتابیسم اوکیه هم مقدار پیشفرض و هم خود null بودن

@mhyeganeh

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

طبق تجربه چندنفر دیگه در اینجا، یک دلیل دیگرش میتونه میدلور های کاستومی باشه که خودتون اضافه کردید. تک به تک غیرفعالشون کنید تا ببینید آیا نتیجه عوض میشه یا نه...
یا مثلا یکبار یک نسخه fresh لاراول رو نصب کنید و مجدد امتحان کنید.

Ali
Ali
@ali200316

یکدنیا ممنون. حتما بررسی میکنم
یه چیزی که خیلی تعجب میکنم اینه که روی لوکال هیچ مشکلی نداره. و فقط روی هاست این مشکل رو داره.

@mhyeganeh

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

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