我如何更新没有ID的表格

时间:2019-08-01 11:16:50

标签: php laravel

我的客户想使他的徽标在网站上动态化。因此,在仪表板中,我在管理仪表板中包含一个字段名称“设置”,他可以在其中更改其徽标。为此,我需要更新不带id的设置表,因为最初数据库中没有任何数据。要更新表而不创建需要“ id”。因此,我面临一个问题。 如果有其他替代方法可以使徽标在网页中动态化,请建议我。

<form action="{{route('updatesettings',['id'=>$settings->id])}}" method="post" enctype="multipart/form-data">
    {{csrf_field()}}
    <div class="form-group">
        <label for="changelogo">CHANGE LOGO</label><br>
        <input type="file" name="image" class="form-control ">
    </div>
    <div class="form-group">
        <label for="changelogo">CHANGE Image for About Home page</label><br>
        <input type="file" name="image1" class="form-control ">
    </div>
    <div class="form-group">
        <label for="changelogo">CHANGE First Image for About page</label><br>
        <input type="file" name="image2" class="form-control ">
    </div>
    <div class="form-group">
        <label for="changelogo">CHANGE Second Image for About page</label><br>
        <input type="file" name="image3" class="form-control ">
    </div>
    <div class="form-group">
        <label for="about">About</label>
        <textarea name="about" class="form-control"></textarea>
    </div>
    <div class="form-group">
        <button class="btn btn-primary">update</button>
    </div>
</form>

控制器

public function updatesettings(Request $request)
    {

        $data['about'] = $request->about;
        if($request->hasFile('image'))
        {
                $image = $request->file('image');
                $ext=$image->getClientOriginalExtension();
                $imageName = md5(microtime()).'.'.$ext;
                $uploadPath = public_path('uploaded/');
                if($image->move($uploadPath,$imageName))
                {
                    $data['image'] = $imageName;
                }
        }
        if($request->hasFile('image1'))
        {
                $image = $request->file('image1');
                $ext=$image->getClientOriginalExtension();
                $imageName = md5(microtime()).'.'.$ext;
                $uploadPath = public_path('uploaded/');
                if($image->move($uploadPath,$imageName))
                {
                    $data['image1'] = $imageName;
                }
        }
        if($request->hasFile('image2'))
        {
                $image = $request->file('image2');
                $ext=$image->getClientOriginalExtension();
                $imageName = md5(microtime()).'.'.$ext;
                $uploadPath = public_path('uploaded/');
                if($image->move($uploadPath,$imageName))
                {
                    $data['image2'] = $imageName;
                }
        }
        if($request->hasFile('image3'))
        {
                $image = $request->file('image3');
                $ext=$image->getClientOriginalExtension();
                $imageName = md5(microtime()).'.'.$ext;
                $uploadPath = public_path('uploaded/');
                if($image->move($uploadPath,$imageName))
                {
                    $data['image3'] = $imageName;
                }
        }
        if(Setting::first()->update($data))
        {
            return redirect()->route('showsettings');
        }
        return redirect()->route('showsettings');

    }
  

试图获取非对象的属性“ id”(查看:C:\ xampp \ htdocs \ odan \ resources \ views \ admin \ modules \ settings \ setting.blade.php)

2 个答案:

答案 0 :(得分:0)

正如您所说的,最初没有数据权。那为什么要从form传递ID。从您的问题来看,settings表中总会有一个条目。

因此,制作一个没有id的简单route并通过从设置Setting::first() // instially empty中获取数据来显示数据

然后在命中提交时更新您建模的模型

$setting = Setting::first();
$setting->myfields = $fileds;
$setting->save(); 

就这样。

即使您可以使用laravel的updateOrCreate方法

答案 1 :(得分:0)

您需要为其保留默认数据。制作数据库表以获取徽标。最初,您可以保留“ defaultimg”,并且当用户想要对其进行更新时,请获取该行ID并对其进行更新,如果您只有1个徽标,则请进行验证以确保用户不能在该表中添加多个数据(“徽标”表) )。希望你能得到它。