laravel中的软删除未在视图中隐藏记录

laravel中的软删除未在视图中隐藏记录,laravel,Laravel,我正在使用Elount soft delete删除数据库中的一行。我使用函数destroy,在数据库列deleted_at中有一个日期,但这并不是在视图中隐藏已删除的记录。 我的代码在控制器中 $query = Role::join('users', 'roles.id', '=','users.role_id'); $user = User::all(); $users = $query->select('users.*','roles.name as role_name')->p

我正在使用Elount soft delete删除数据库中的一行。我使用函数destroy,在数据库列
deleted_at
中有一个日期,但这并不是在视图中隐藏已删除的记录。 我的代码在控制器中

$query = Role::join('users', 'roles.id', '=','users.role_id');
$user = User::all();
$users = $query->select('users.*','roles.name as role_name')->paginate(10);
用户模型中的我的代码

use SoftDeletes;
use HasFactory;

protected $table = 'users';
protected $guarded = [];
protected $hidden = [
    'password', 'remember_token', 'deleted_at'
];

public function roles() {
    return $this->belongsTo(Role::class);
}
我的代码在模型角色中

use HasFactory;

protected $table = 'roles';
protected $guarded = [];

public function users() {
    return $this->hasMany(User::class);
}

如果你使用雄辩的关系,它会工作,但现在你使用的是加入。eloquent orm的登录是这样的,您可以编写SQL并查询它,但您必须手动选择想要或不想要哪个(在这种情况下,您不希望在列中填写
已删除的记录。但是,如果您使用关系,您可以享受软删除和许多其他功能的好处。

看来,这里的问题是连接。软删除是一个有说服力的功能,在模型本身上有效,但在连接表上无效。如果您必须在两个表中,您必须查询自己才能删除删除的列

$query = Role::join('users', 'roles.id', '=', 'users.role_id');
$user = User::all();
$users = $query->select('users.*', 'roles.name as role_name')->where('users.deleted_at', null)->paginate(10);
因此,这将删除删除的列。但是,当您使用关系时,为什么您必须加入自己?关系将为您处理此问题。您可以简单地调用

$roles = Role::with('users')->get();
您可以让每个角色的用户

foreach ($roles as $role) {
    foreach ($role->users as $user) {
        echo $user->attribute;
    }
}
还有一个注意事项。您需要将外键名称作为关系定义的第二个参数传递,因为它与laravel的命名约定不匹配

public function roles() {
    return $this->belongsTo(Role::class, 'role_id');
}


您可以使用
$hidden
属性
protected$hidden=['deleted_at'];
不工作的兄弟:(在你的问题中添加一些代码。你尝试了什么,为什么不起作用。很难猜测和找到解决方案。更新了模型角色中的代码。有人帮我修复此错误。为你添加了一个答案。请查看。谢谢你的回复。但是为什么其他项目可以做,但此项目不起作用?如何修复?其他项目可能使用不同的租金比这个例子要高。可能你使用了用户而不是角色模型。如果你尝试将用户加入角色模型,可能会修复,但只有删除的用户检测不到角色。我会说使用关系而不是加入,原因有两个:1-更简单:)2-有更多的好处。是的,加入有更多的性能,但在大多数应用中,你感觉不到。谢谢你的回复。我可以用你的解决方案解决它。非常感谢。爱你3000很高兴这有帮助。请将此作为可接受的答案检查。:)
public function users() {
    return $this->hasMany(User::class, 'role_id');
}