Laravel 在 paket 中删除了 1 个键,但没有反馈和更改

问题描述

我有 2 个模型:

    class Penghuni extends Model
{
    use SoftDeletes;

    protected $fillable = [
        'nama_penghuni','email','phone','tower','no_unit'
    ];

    protected $guarded = [];

    public function penghunis() {

        return $this->hasMany(Penghuni::class);
    }
}

class Packet extends Model
{
    use SoftDeletes;

    protected $fillable = [
        'name','tanggal_masuk','tanggal_keluar','penerima','no_unit','penghuni_id'
    ];

    public function penghuni() {
        
        return $this->belongsTo(Penghuni::class);
    }
}

当我想要进行软删除时,deleted_at 列值没有更新,但在我的控制器成功时重定向。这是我的控制器:

public function destroy(Packet $packet)
    {
        $packet->delete();

        session()->flash('success','Delete Packet Berhasil');

        return redirect(route('paket.index'));
    }

删除时没有变化,我的按钮是:

<a href="javascript:$('#delete_paket{{ $paket->id }}').submit();" class="btn btn-danger" onclick="return confirm('Anda yakin ingin menghapus data paket {{ $paket->name }}?');">Delete</a>
                                                <form action="{{ route('paket.destroy',$paket->id) }}" method="POST" id="delete_paket{{ $paket->id }}">
                                                    @csrf
                                                    @method('DELETE')
                                                    <button type="submit" class="btn btn-danger" hidden>Delete</button>
                                                </form>

解决方法

您的路由参数可能是 paket 而不是 packet。更改您的方法签名,使参数名称与路由参数名称匹配:

public function destroy(Packet $paket)

如果这不匹配,那么 Laravel 只是认为您想要依赖注入而不是路由模型绑定。因此,您目前正在获得一个新的模型实例(非现有模型实例),而不是您的模型绑定(现有模型实例)。

您可以运行 php artisan route:list 来查看路由参数的名称。

,

将您的 $packet 以单数形式更改为您的路线名称,但由于您使用的不是英语,因此请使用您的路线名称:

public function destroy(Packet $paket)

另一种方法是不要在方法 arg 中使用模型:

public function destroy($id)
    {
        $packet = Packet::find($id)
        $packet->delete();

        session()->flash('success','Delete Packet Berhasil');

        return redirect(route('paket.index'));
    }