Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择并更新laravel中没有ID的表列_Php_Laravel_Laravel 5 - Fatal编程技术网

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中的所有当前设置。