Php 选择并更新laravel中没有ID的表列
我正在尝试在管理面板中创建一个页面,管理员可以从中更改站点设置,例如:Php 选择并更新laravel中没有ID的表列,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在尝试在管理面板中创建一个页面,管理员可以从中更改站点设置,例如:站点标题,默认国家/地区等 我在数据库中创建了一个名为settings的表,它没有ID,因为我并不真正需要它。将只更新一行。没有插入新行 我已经在我的route.php中添加了这行代码 Route::get('settings', 'SettingsController@index')->name('admin.settings'); Route::post('settings/update', 'SettingsCon
站点标题
,默认国家/地区
等
我在数据库中创建了一个名为settings
的表,它没有ID,因为我并不真正需要它。将只更新一行。没有插入新行
我已经在我的route.php中添加了这行代码
Route::get('settings', 'SettingsController@index')->name('admin.settings');
Route::post('settings/update', 'SettingsController@update')->name('admin.settings.update');
这是我在SettingsController.php中的更新函数
public function index()
{
$settings = Settings::all();
return view('backend.settings',compact('settings'));
}
public function update( Request $request)
{
$settings->settings_site_title = $request['site_title'];
$settings->settings_item_per_page = $request['item_per_page'];
$settings->settings_default_country = $request['default_country'];
$settings->settings_max_image_post = $request['max_image_post'];
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
形式呢
@foreach ($settings as $preferences)
{!! Form::open(['route' => 'admin.settings.update','files' => true , 'class' =>'form-horizontal']) !!}
<div class="form-group">
{!! Form::label('site_title', 'Site Name', array('class'=> 'col-sm-2 control-label')) !!}
<div class="col-sm-10">
{!! Form::text('site_title', $preferences->settings_site_title, ['class'=>'form-control', 'placeholder'=>'Enter site name', 'id'=>'site_title']) !!}
</div>
</div>
... some more inputs like ^
{!! Form::close() !!}
@endforeach
控制器
public function update( Request $request)
{
$settings = Settings::first(); //missed line
$settings->settings_site_title = $request['site_title'];
$settings->settings_item_per_page = $request['item_per_page'];
$settings->settings_default_country = $request['default_country'];
$settings->settings_max_image_post = $request['max_image_post'];
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
您忘记在
update
方法中设置$settings
变量
public function update( Request $request)
{
$settings = Settings::first(); //missed line
$settings->settings_site_title = $request['site_title'];
$settings->settings_item_per_page = $request['item_per_page'];
$settings->settings_default_country = $request['default_country'];
$settings->settings_max_image_post = $request['max_image_post'];
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
或者更好更短
public function update( Request $request)
{
$settings = Settings::first()->update($request->all());
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
当然,只有在使用需要批量分配的列填充设置
模型的可填充
属性时,这才有效
class Settings extends Model
{
// ...
protected $fillable = [
'site_title',
'item_per_page',
'default_country',
'max_image_post',
];
// ...
}
编辑
试试这个
public function update( Request $request)
{
$settings = Settings::first(); //missed line
$settings->settings_site_title = $request->input('site_title');
$settings->settings_item_per_page = $request->input('item_per_page');
$settings->settings_default_country = $request->input('default_country');
$settings->settings_max_image_post = $request->input('max_image_post');
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
编辑
将其添加到您的设置中
型号
protected $primaryKey = null;
public $incrementing = false;
您忘记在
update
方法中设置$settings
变量
public function update( Request $request)
{
$settings = Settings::first(); //missed line
$settings->settings_site_title = $request['site_title'];
$settings->settings_item_per_page = $request['item_per_page'];
$settings->settings_default_country = $request['default_country'];
$settings->settings_max_image_post = $request['max_image_post'];
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
或者更好更短
public function update( Request $request)
{
$settings = Settings::first()->update($request->all());
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
当然,只有在使用需要批量分配的列填充设置
模型的可填充
属性时,这才有效
class Settings extends Model
{
// ...
protected $fillable = [
'site_title',
'item_per_page',
'default_country',
'max_image_post',
];
// ...
}
编辑
试试这个
public function update( Request $request)
{
$settings = Settings::first(); //missed line
$settings->settings_site_title = $request->input('site_title');
$settings->settings_item_per_page = $request->input('item_per_page');
$settings->settings_default_country = $request->input('default_country');
$settings->settings_max_image_post = $request->input('max_image_post');
$settings->save();
return redirect()->route('admin.settings')->with('alert-success', ' Success');
}
编辑
将其添加到您的设置中
型号
protected $primaryKey = null;
public $incrementing = false;
在foreach之前使用此if条件。我认为$setting变量是空的
在foreach之前使用此if条件。我认为$SETING变量是空的。没有id怎么更新?然后尝试匹配一些列,比如站点标题,然后获取id,然后保存。没有id怎么更新?然后尝试匹配一些列,如站点标题,然后获取id,然后保存感谢您的回答。我喜欢第二个较短的变体,但它不更新数据库。只是重新加载页面。这里有什么问题?我在设置模型中有可填充的属性,第一个变量有sql错误:
未找到列:“where子句”中有1054未知列“id”
这是因为数据库中列的名称Settings\u default\u country
等而出现的,您应该在输入名称和可填充名称中添加设置\uu
前缀/I已将我的模型和当前控制器添加到上述问题中。所有列名都是正确的。谢谢,但仍在抱怨ID
。似乎没有办法在不向表中添加ID的情况下更新它谢谢您的回答。我喜欢第二个较短的变体,但它不更新数据库。只是重新加载页面。这里有什么问题?我在设置模型中有可填充的属性,第一个变量有sql错误:未找到列:“where子句”中有1054未知列“id”
这是因为数据库中列的名称Settings\u default\u country
等而出现的,您应该在输入名称和可填充名称中添加设置\uu
前缀/I已将我的模型和当前控制器添加到上述问题中。所有列名都是正确的。谢谢,但仍在抱怨ID
。似乎在不向表中添加ID的情况下无法更新它否,它不是空的,因为我在页面上看到了DB中的所有当前设置。否,它不是空的,因为我在页面上看到了DB中的所有当前设置。