laravel validation اگر checkbox تیک خورده بود وارد کردن input text الزامی باشد

- 1 سال پیش
توسط محمود آپدیت شد
محمود ( 654 تجربه )
1 سال پیش

سلام خدمت دوستان گرامی.
چگونه الزامی بودن یا نبودن فیلد ها به تیک خوردن یا نخوردن چک باکس مرتبط باشد؟
برای مثال فرض کنید یک محصول در حالت اول دارای یک قیمت ثابت است ولی در حالت دوم محصول با توجه به وزن دارای قیمت های متفاوتی است
فیلد های حالت اول در table product و دفیلد های حالت دوم در pivot table product_weight ذخیره می شوند
اگر چک باکس تیک خورده شود فیلد های حالت اول غیر فعال می شوند و فیلد های حالت دوم ظاهر می شوند.
حالا ما می خواهیم با توجه به حالت چک باکس وارد کردن فیلدها الزامی یا غیر الزامی شود.
با توجه به مستندات لاراول از required_with و required_without استفاده کردم ولی به درستی کار نمی کنه.
وقتی فیلدهای حالت دوم خالیه خطای null بودن در همون صفحه نمایش داده نمیشه


SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'new_prices' cannot be null (SQL: insert into `product_weight` (`new_prices`, `old_prices`, `product_id`, `weight_id`) values (, , 61, 1))

ولی اگر فیلد های حالت اول خالی باشه خطا در همان صفحه به درستی نمایش داده میشه
نظر شما دوستان گرامی چیه؟
product

    protected $fillable = [

        'old_price' , 'new_price',
     ];

    protected $guarded = [''weights', 'old_prices' , 'new_prices'];

    public function weights(){

        return $this->belongsToMany(Weight::class)->withPivot('new_prices','old_prices');
    }

create

 <input type="text" name="new_price">
<input type="text" name="old_price">
 <input type="checkbox" id="diff" name="diff" value="۱" >
    <select class="form-control" name="weights[]" id="weight" data-live-search="true" >
                            @foreach($weights as $weight)
                                <option value="{{$weight->id}}" > {{$weight->name}} </option>
                            @endforeach
                        </select>
   <input type="text"  name="new_prices[]" >
<input type="text"  name="old_prices[]" >

اعتبارسنجی

 public function rules()
    {
        if($this->method() == 'POST' ) {
            return [
                'old_price' => 'required_without:diff',
                'new_price' => 'required_without:diff',

                'old_prices' => 'required_with:diff',
                'new_prices' => 'required_with:diff',

            ];
        }
بهترین پاسخ انتخاب شده توسط محمود
محمود
1 سال پیش

چون فیلدهای حالت دوم آرایه بودند باید در اعتبار سنجی بجای

  'old_prices' => 'required_with:diff',
'new_prices' => 'required_with:diff',

از

  'old_prices.*' => 'required_with:diff',
 'new_prices.*' => 'required_with:diff',

استفاده می کردم.

محمود ( 654 تجربه )
1 سال پیش

چون فیلدهای حالت دوم آرایه بودند باید در اعتبار سنجی بجای

  'old_prices' => 'required_with:diff',
'new_prices' => 'required_with:diff',

از

  'old_prices.*' => 'required_with:diff',
 'new_prices.*' => 'required_with:diff',

استفاده می کردم.

برای ارسال پاسخ باید وارد سایت شوید