我正在使用雄辩的软删除来删除数据库中的一行。我使用函数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);
}
看来,这里的问题是联接。软删除是一种雄辩的功能,它适用于模型本身,但不适用于联接表。如果必须连接两个表,则必须查询自己以删除已删除的列。就您而言,您可以像
$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');
}
和
public function users() {
return $this->hasMany(User::class, 'role_id');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句