【问题标题】:Laravel 5.1 Delete a row from databaseLaravel 5.1 从数据库中删除一行
【发布时间】:2015-10-13 17:58:12
【问题描述】:

我正在尝试通过单击按钮来删除类别

刀片:

<td class="center"><a href="{{URL::to('/deletecat/'.$category->name) }}"><span class="glyphicon glyphicon-trash"></span></a></td>

路线:

Route::get('/deletecat/{name}','CategoryController@delete');

控制器:

 public function delete($name)
    {

        category::find($name)->delete();

        return Redirect::route('managecategory');

    }

但我在单击按钮时遇到错误

Call to a member function delete() on a non-object

任何帮助表示赞赏。

【问题讨论】:

  • category::find($name) 是这里的问题。你确定它返回一个有效的响应吗?做一个dd(category::find($name)) 看看它会吐出什么。
  • 它返回 null 作为输出
  • 那是你的问题。几率是 $name 在数据库中不存在。确保它在那里。对于未来的情况,请执行 $record = category::find($name); if(null !== $record){//do stuff here} 之类的操作
  • 但我在数据库中有一个字段名称作为名称

标签: php laravel-5 laravel-routing


【解决方案1】:

::find($id) 方法要求 $id 是一个数字,即您要查找的行的主键。

如果要按名称删除一行,则应使用以下代码:

category::where('name', $name)->delete();

【讨论】:

  • find() 总是由primary key 找到,无论类型如何。
【解决方案2】:

错误显然是因为返回的NON-OBJECT。

::find($name) 返回一个空对象或 null

这是因为搜索为空。

确保 name 是使用 find 的主键。

否则:

使用 ::where('name', $name)->delete();

或:

::where('name','=', $name)->delete();

*我指出=,因为如果您需要搜索与= 不同的搜索,请使用&gt;= &lt;&gt; 等等...

其次,使用destroy不是很重要。推荐但不是必须的!

【讨论】:

    【解决方案3】:

    在您看来: 它必须是提交 POST 请求的表单,如下所示:

        <form  action="/deletecat/{{$data->id}}" method="post">
                @csrf
                @method('DELETE')
            <input type="submit" value="delete " >
        </form>
    

    因为这是 POST 请求,所以必须使用 csrf 和删除操作。

    在您的路线中,它使用 delete() 方法,然后使用控制器。

    Route::delete('/deletecat/{name}', 'CategoryController@destory');
    

    在控制器中:

     public function destory($name)
    {
    
        category::find($name)->delete();
    
        return Redirect::route('managecategory');
    
    }
    

    这是 laravel 名称格式的作用:

    【讨论】:

    • 请分享更多细节 - 为什么更改该方法的名称会有帮助?命名路线有什么魔力吗?
    • 这是laravel对action和controller的命名方式,我想和其他开发者合作会很方便。
    • 这肯定会使代码更标准,但它并不能解释他们遇到的问题,这是 6 年前给出的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2017-10-06
    • 2016-06-09
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多