0

So Im trying to submit the edited data back to the database using the controller, yet I am getting the error "Non-static method Illuminate\Database\Eloquent\Model::update() should not be called statically" I think the code in the update function needs to be changed.

web.php file

Route::post('/my-updated-routes', 'MyroutesController@update');

controller

public function update(Request $request)
{
    Myroutes::update([ //updateing to myroutes table
        'start' => $request->start,
        'end' => $request->end,
        'waypoints' => implode(",", $request->waypoints)
    ]);
    return redirect('/my-saved-routes');
}

show.blade.php

<form method="post" action="{{ url('/my-updated-routes') }}">
    {{ csrf_field() }}
    <div class="form-group">
        <label>Start Point</label>
        <input type="text" id="start" name="start" class="form-control" value="{{ $myroute->start }}" required/>
    </div>

    <div class="form-group">
        <label>End Point</label>
        <input type="text" id="end" name="end" class="form-control" value="{{ $myroute->end }}" required/>
    </div>

    <div>
    <label for="mode">Mode of Travel</label>
        <select id="mode" class="form-control" onchange="calculateAndDisplayRoute();">
          <option value="DRIVING" name="driving">Driving</option>
          <option value="WALKING" name="walking">Walking</option>
          <option value="BICYCLING" name="cycling">Cycling</option>
          <option value="TRANSIT" name="public-transport">Public Transport</option>
        </select>
    </div>

    <p>Note: Public Transport is only available for start and end points.</p>


    <div id="dynamicInput" class="form-group">
        <label>Additional Destinations</label>
        <input type="text" name="waypoints" class="form-control" autocomplete="on" value="{{ $myroute->waypoints }}">
    </div>

    <input type="button" class="btn btn-secondary" value="+" onClick="addInput('dynamicInput');" style="padding:0 10px;">               
    </br></br>
    <input type="button" id="calc-route" style="color:#2b2b2b" class="btn btn-light" value="Calculate Route"/>

    <input type="submit" id="update-route" class="btn btn-success" value="Update"/>
    <input type="button" class="btn btn-danger" value="Delete"/>

</form> <!-- end of form -->    

2 Answers 2

0

You can't directly (statically) call ::update(..) method on your models. You necessarily have to scope it with some query method. For example Myroutes::where(some_column, someValue)->update(...) will work.

I'm not sure why that is, but I assume it's a way to prevent people from mistakenly updating everything in a table.

If, however you do want to update all rows in a table, you could do something simple like Myroutes::where(true, true)->update(...).

Sign up to request clarification or add additional context in comments.

Comments

0

The problem is what do you exactly want to update in the controller?

the update method is none-static method And you can't call it with (::)"pamayim nikodatiyim". And it means you must get the row that you want to update from database and then call the update method.

to do that you have two ways:

by laravel model binding, you can read the docs here: https://laravel.com/docs/5.6/routing#route-parameters

Or you can just send the id of the row that you want to update, retrieve the data and then call the update method:

$data = YourModelName::whereId($request['row_id'])->first();

$data->update([ //updateing to myroutes table
        'start' => $request->start,
        'end' => $request->end,
        'waypoints' => implode(",", $request->waypoints)
        ]); 

You can not update without specifying which row you want to update. it doesn't make any sense.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.