所以我试图使用控制器将编辑后的数据提交回数据库,但我收到错误"非静态方法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 -->
答案 0 :(得分:0)
您无法直接(静态)调用模型上的::update(..)
方法。您必须使用某种查询方法来限定它。例如,Myroutes::where(some_column, someValue)->update(...)
将起作用。
我不确定为什么会这样,但我认为这是一种防止人们错误地更新表中所有内容的方法。
但是,如果您确实希望更新表格中的所有行,则可以执行简单的操作,例如Myroutes::where(true, true)->update(...)
。
答案 1 :(得分:0)
问题是你究竟想在控制器中更新什么?
更新方法是非静态方法你不能用(::)“pamayim nikodatiyim”调用它。这意味着您必须从数据库中获取要更新的行,然后调用更新方法。
要做到这一点,你有两种方式:
通过laravel模型绑定,您可以在这里阅读文档: https://laravel.com/docs/5.6/routing#route-parameters
或者您只需发送要更新的行的ID,检索数据然后调用更新方法:
$data = YourModelName::whereId($request['row_id'])->first();
$data->update([ //updateing to myroutes table
'start' => $request->start,
'end' => $request->end,
'waypoints' => implode(",", $request->waypoints)
]);
如果不指定要更新的行,则无法更新。它没有任何意义。