如何更新 Laravel 中的现有列

Posted

技术标签:

【中文标题】如何更新 Laravel 中的现有列【英文标题】:How can I update an exiting column on Laravel 【发布时间】:2020-12-12 13:09:53 【问题描述】:

我有一个页面,我可以使用 Summernote 添加内容。但是当我更新内容时,没有任何变化。

这是我的 StoreController。

public function store(Request $request)

    $detail=$request->content;
    $dom = new DOMDocument();
    $dom->loadhtml($detail, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $images = $dom->getelementsbytagname('img');
    foreach($images as $k => $img)
        $data = $img->getattribute('src');
        list($type, $data) = explode(';', $data);
        list(, $data)      = explode(',', $data);
        $data = base64_decode($data);
        $image_name= time().$k.'.png';
        $path = public_path('uploads') .'/'. $image_name;

        file_put_contents($path, $data);

        $img->removeattribute('src');
        $img->setattribute('src', 'uploads'.'/'.$image_name);
    

    $detail = $dom->savehtml();
    $abouts = new about;
    $abouts->content = $detail;
    $abouts->save();
    return view('admin.about',compact('abouts'));

这是我的更新控制器

    public function update(Request $request)
    
        if($request->isMethod('POST'))

            //in this section all code are same as like as my store controller
            
            $abouts->update();
            return view('admin.about',compact('abouts'));
        

    

关于如何解决此问题的任何想法?

【问题讨论】:

你正在创建 about 的新实例 如果在控制器的 update 方法中创建新实例是正确的,那么你应该检查 about 模型并确保它有可用的 $fillable 数组。 是的,它已经保护了 $fillable =['content']; 你做dd($detail)的时候,有数据吗? 请执行 dd() 并检查当您尝试存储数据时发生了什么,您会确切知道 【参考方案1】:

如果您在请求中获取数据或不使用dd() 方法,最好的解决方案是先对其进行测试。或

你可以试试这个:

public function update(Request $request)

    if($request->isMethod('PUT'))

        //in this section all code are same as like as my store controller
        
        $abouts->update();
        return view('admin.about',compact('abouts'));
    


或者您可以删除 if 条件并尝试

public function update(Request $request)

    

        //in this section all code are same as like as my store controller
        
        $abouts->update();
        return view('admin.about',compact('abouts'));
    


【讨论】:

我也试试这个方法@Naveed Ali【参考方案2】:

在您的商店功能中,您使用了这个$abouts = new about; 你在更新函数中做同样的事情吗?那么它将是一个新实例。

添加验证可以帮助您了解未更新的原因。

\Log::debug('message'); 如果您在进行验证后仍然没有遇到问题,也很有用。

public function update($id, Request $request)

    //you can pass $id of the record which you want to update or even pass it along with the other request parameters.
    $task = Task::findOrFail($id);

    //validate the request( would suggest to do the same in your store function too. )
    $this->validate($request, [
        'title' => 'required',
        'description' => 'required'
    ]);

    $input = $request->all();

    $task->fill($input)->save();

    Session::flash('flash_message', 'Task successfully added!');

    return redirect()->back();

【讨论】:

以上是关于如何更新 Laravel 中的现有列的主要内容,如果未能解决你的问题,请参考以下文章

使用迁移 Laravel 5.4 更新列

Laravel - 使用 Join 语句更新表中的所有列

Laravel 迁移:添加具有现有列默认值的列

使用 PostgreSQL 更新 Laravel 迁移中的枚举列

laravel4 更新数据透视表中的附加列

Laravel迁移在现有数据库表中添加列问题