问题描述
我有 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'));
}