0
votes

When I use validation request no data passet and this is the error message

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'longitude' cannot be null (SQL: update settings set longitude = , latitude = , zoom = , address = , email = , tel = , about = where id = 1)

but without it run correctly

migration

 public function up()
 {
        Schema::create('settings', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('longitude');
            $table->integer('latitude');
            $table->integer('zoom')->default(14);
            $table->string('address');
            $table->string('email');
            $table->string('tel');
            $table->text('about');
            $table->timestamps();
        });
}

rules method

public function rules()
    {
        return [
            'longitude'=>'required|numeric',
            'latitude'=>'required|numeric',
            'zoom'=>'required',
            'address'=>'min:15',
            'email'=>'required|email',
            'tel'=>'required',
            'about'=>'required',
        ];
    }

update methode

use App\Http\Requests\SettingsFormRequest;
...
public function update(SettingsFormRequest $request, Settings $setting)
{
        Settings::whereId($setting->id)->update([
            'longitude'=>$request->validate()['longitude'],
            'latitude'=>$request->validate()['latitude'],
            'zoom'=>$request->validate()['zoom'],
            'address'=>$request->validate()['address'],
            'email'=>$request->validate()['email'],
            'tel'=>$request->validate()['tel'],
            'about'=>$request->validate()['about']
        ]);

        return redirect(route('settings.index'));
}

blade template

 <form action="{{ route('settings.update', 1) }}" method="POST">
                {{ csrf_field() }}
                {{ method_field('PATCH') }}

                <div class="row">
                    <div class="input-field col s4">
                        <input type="text" name="longitude" id="longitude" class="validate" value="{{ old($setting->longitude) ?? $setting->longitude }}">
                        <label class="active" for="longitude">Longitude</label>
                    </div>
                    <div class="input-field col s4">
                        <input type="text"  name="latitude" id="latitude"  class="validate" value="{{ old($setting->latitude) ?? $setting->latitude }}">
                        <label class="active" for="latitude">Latitude</label>
                    </div>
                    <div class="input-field col s4">
                        <select id="zoom" name="zoom">
                            @for($i=1; $i<18; $i++)
                                @if($i == $setting->zoom)
                                    <option value="{{ $i }}" selected>{{ $i }}</option>
                                @else
                                    <option value="{{ $i }}">{{ $i }}</option>
                                @endif
                            @endfor
                        </select>
                        <label class="active" id="zoom">Zoom</label>
                    </div>
                </div>


                <div class="input-field col">
                    <input type="text"  name="address" id="address"  class="validate" value="{{ old($setting->address) ?? $setting->address }}">
                    <label class="active" for="address">Address</label>
                </div>
                <div class="input-field col">
                    <input type="text"  name="email" id="email"  class="validate" value="{{  old($setting->email) ?? $setting->email }}">
                    <label class="active" for="email">Email</label>
                </div>
                <div class="input-field col">
                    <input type="text"  name="tel" id="tel"  class="validate" value="{{ old($setting->tel) ?? $setting->tel }}">
                    <label class="active" for="tel">Telephone</label>
                </div>





                <textarea name="about">{{ old($setting->about) ?? $setting->about }}</textarea>
                <button type="submit" class="btn btn-primary btn-block">Save</button>

            </form>
2
Why do you do this $request->validate()['longitude'] you just need to do it like so $request->longitude and if the validation is failed you will be redirected automatically. and of-course you need to apply this to all your fields - Amr Aly
$request->validate()['longitude'] for validation by the formrequest it work in other methods but here don't work and the solution of my problem here is to make the statments : $request->variable - Haithem DISSEM

2 Answers

0
votes

in your SettingsFormRequest. make sure you extend FormRequest

class SettingsFormRequest extends FormRequest
{
    public function authorize() //this is needed and return to true
    {
        return true; 
    }

    public function rules()
    {
        return [
        'longitude'=>'required|numeric',
        'latitude'=>'required|numeric',
        'zoom'=>'required',
        'address'=>'min:15',
        'email'=>'required|email',
        'tel'=>'required',
        'about'=>'required',
        ];
    }
}

in your controller

public function update(SettingsFormRequest $request, $id)
{
        // mass assignment.. make sure you list necessary column in fillable array in Setting model
        Settings::find($id)->update($request()->all()); 
        return redirect(route('settings.index'));
}

That's All..

0
votes

Thank you mates so much and i was found the solution with your help. The problem is in controller in:

$request->validate()['variable']

just delete the validate method and make the statments like this :

$request->variable