Как обновить данные в базе данных с помощью контроллера в Laravel - Ошибка нестатического метода - PullRequest
0 голосов
/ 26 апреля 2018

Поэтому я пытаюсь отправить отредактированные данные обратно в базу данных с помощью контроллера, но я получаю сообщение об ошибке "Нестатический метод Illuminate \ Database \ Eloquent \ Model :: update () не должен вызываться статически " Я думаю, что код в функции обновления необходимо изменить.

файл web.php

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

Контроллер

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 ]

0 голосов
/ 26 апреля 2018

Проблема в том, что именно вы хотите обновить в контроллере?

метод обновления является нестатическим, и его нельзя вызывать с помощью (: :) "pamayim nikodatiyim". А это значит, что вы должны получить строку, которую хотите обновить, из базы данных, а затем вызвать метод обновления.

для этого у вас есть два способа:

по привязке модели laravel, вы можете прочитать документы здесь: https://laravel.com/docs/5.6/routing#route-parameters

Или вы можете просто отправить идентификатор строки, которую вы хотите обновить, получить данные и затем вызвать метод обновления:

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

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

Вы не можете обновить, не указав, какую строку вы хотите обновить. это не имеет никакого смысла.

0 голосов
/ 26 апреля 2018

Вы не можете напрямую (статически) вызвать метод ::update(..) на своих моделях. Вы обязательно должны охватить его каким-либо методом запроса. Например Myroutes::where(some_column, someValue)->update(...) будет работать.

Я не уверен, почему это так, но я предполагаю, что это способ предотвратить ошибочное обновление всего в таблице.

Если, однако, вы хотите обновить все строки в таблице, вы можете сделать что-то простое, например Myroutes::where(true, true)->update(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...