【问题标题】:Can't delete from SQLite table in Laravel无法从 Laravel 中的 SQLite 表中删除
【发布时间】:2019-11-09 22:03:02
【问题描述】:

我正在为求职面试做“带回家的作业”。虽然我在 Web 开发方面有一些经验,但这不是我的强项。我正在尝试使用 HTML DELETE 按钮删除 SQLite 表中的一行。我正在使用 Laravel-php 框架。

我在 google 和 stack Overflow 上尝试了不同的解决方案,但似乎都没有解决问题。我在Laracasts video

之后模仿了我的方法

Link to my code

刀片似乎传递了正确的信息(来自 $contact->id 的 $id)并且控制器似乎正在接收。但是与该 ID 关联的给定联系人并未被删除。

来自刀片:

<div class="col-md-6">
    <table class="table table-striped table-hover">
        <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Address</th>
        </tr>
        @foreach($contacts as $contact)
            <tr>
                <td> {{$contact->f_name}} </td>
                <td> {{$contact->l_name}} </td>
                <td> {{$contact->address}} </td>
                <td>
                    <form method="POST" action="/delete/{{ $contact->id }}">
                        @method('DELETE')
                        @csrf

                        <div class="field">
                            <div class="control">
                                <button type="submit" class="button">Delete Contact</button>
                            </div>
                        </div>

                    </form>
                </td>
            </tr>
        @endforeach
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>
</div>

来自控制器:

public function delete($id) {

  Contact::find($id)->delete();

  return view('index');

}

从路线:

Route::delete('/delete', [
  'uses'=>'ContactController@delete',
  'as'=>'contacts.delete'
]);

【问题讨论】:

  • 很抱歉 HTML 代码中的缩进凌乱,stackoverflow 让我缩进了 >= 4 行,这让一切都失败了。
  • 您的模型是否使用软删除?
  • 不使用软删除。
  • 如果您想查看问题,我建议对您的问题进行编辑。我相信这将使代码更易于阅读。 stackoverflow.com/review/suggested-edits/23388383
  • 您需要将route 更改为:Route::delete('/delete/{id}', [ 'uses'=&gt;'ContactController@delete', 'as'=&gt;'contacts.delete' ]); 建议使用action="{{ route('contacts.delete', [$contact-&gt;id]) }}" 之类的表单操作,而不是action="/delete/{{ $contact-&gt;id }}"

标签: php laravel sqlite


【解决方案1】:

您没有在删除方法中获得 id,您需要将其包含在 url 中,例如

Route::delete('/delete/{id}', [
  'uses'=>'ContactController@delete',
  'as'=>'contacts.delete'
]);

在这种情况下,您不需要更改删除方法。

您也可以在不更改删除路由的情况下从请求对象中检索 id,在这种情况下,您需要将 id 作为隐藏输入包含在您的视图中,并且您的删除方法将如下所示

public function delete(Request $request) {

  Contact::find($request->id)->delete();

  return view('index');

}

【讨论】:

  • 不幸的是,当我使用该删除方法时,我收到“在 null 上调用成员函数 delete()”错误
  • 您选择了哪种解决方案?链接上有 id 的还是请求对象的?
  • 第二个,请求对象中的id
  • 输入类型也隐藏在视图中
  • 如果您需要查看其他内容,github 链接中的代码是最新的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 2015-06-03
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多