سلام و وقت بخیر.
دوستان مثلا اینپوت خالی وقتی برمیگرده و ذخیره میکنم بجای اینکه null بشه خالی ذخیره میکنه.
و این مشکل unique بودن یوزرنیم اینارو بهم میریزه.
بعد این مورد توی لوکالم اوکیه و null ثبت میشه. ولی روی هاست مشکل داره
لاراول ورژن 8 - php 8
یجوری که من هر شرط isnull نوشتم دیگه کار نمیکنه و باید empty() بذارم.
اینو ممنون میشم راهنمایی کنید دلیل این تفاوت چیه در لوکال و هاست.
@rezajahangir @mhyeganeh @juza66 @intellect.circle @hesammousavi @ali.bayat
سلام اینو به کدت اضافه کن ببین کار میکنه
foreach($request as $val){
if ($val ===null){
$val = null
}
}
تست نکردم
اول از همه لازمه بدونیم که بصورت پیش فرض باید همین اتفاق بیفته. یعنی اگر 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
}
میشه بیشتر توضیح بدید و یک مثال بزنید که قرار هست این کد چه کاری انجام بده دقیقا؟
ممنون از شما، بله توی میدلور ها فعاله
و دیتابیسم اوکیه هم مقدار پیشفرض و هم خود null بودن
طبق تجربه چندنفر دیگه در اینجا، یک دلیل دیگرش میتونه میدلور های کاستومی باشه که خودتون اضافه کردید. تک به تک غیرفعالشون کنید تا ببینید آیا نتیجه عوض میشه یا نه...
یا مثلا یکبار یک نسخه fresh لاراول رو نصب کنید و مجدد امتحان کنید.
یکدنیا ممنون. حتما بررسی میکنم
یه چیزی که خیلی تعجب میکنم اینه که روی لوکال هیچ مشکلی نداره. و فقط روی هاست این مشکل رو داره.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟