所以我有"用户"模型和"用户设置"模型。 " usersettings" model有一个名为" users_id"键将其链接回用户模型。
我正在使用spatie权限和角色模块...
所以在用户模型中我有
use Spatie\Permission\Traits\HasRoles;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
use HasRoles;
......
public function usersettings()
{
#return $this->hasOne('\App\usersettings','users_id');
return $this->belongsTo('\App\usersettings','users_id');
}
}
在用户设置模型中我有
namespace App;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
class usersettings extends Model
{
use HasRoles;
protected $guard_name = 'web'; // or whatever guard you want to use
protected $table = 'usersettings';
protected $fillable = [
'users_id','stripe_customer',
];
//
}
在我的控制器中我有
public function chooseUser(Request $request){
$theuserID = $request->input('id');
\Log::info('The User ID:'.$theuserID);
$whichuser = \App\User::find($theuserID)->with('usersettings')->get();
$whichuser2 = \App\User::find($theuserID);
/*if($isadmin = $whichuser2->hasRole('admin')){
$whichuser->admin ='isadmin';
}*/
#\Log::info('THE HAVE:'.$isadmin);
\Log::info('THE USER:'.$whichuser);
#$roles = $whichuser->getRoleNames();
#\Log::info('THE USER:'.$roles);
return $whichuser;
}
我的目标是使用用户设置返回所有用户信息,并查看用户是否具有管理员角色。我还没有弄清楚如何把这三个放在一起。
我认为它可能是一个联合而不是一个现实,但后来我没有'有一个uUser模型,不能使用 spatie 包中的方法。
由于 [R
答案 0 :(得分:0)
您需要解决一些问题。
您可以认为用户有许多用户设置,用户设置属于用户。
在用户模型中,您应该定义此关系:
public function usersettings() {
return $this->hasMany('\App\usersettings', 'users_id');
}
在用户设置模型中,您应该定义此inverse relationship:
public function user() {
return $this->belongsTo('App\User', 'users_id');
}
当您访问关系时,您可以简单地访问该关系,就好像它是一个属性一样。如果您访问usersettings关系,则返回类型为Illuminate\Database\Eloquent\Collection。
$whichuser = \App\User::find($theuserID);
$userSettings = $whichuser->usersettings;
您使用with
的方式不正确,您应该检查预先加载:
当访问Eloquent关系作为属性时,关系 数据是“延迟加载”。这意味着关系数据不是 实际加载,直到您第一次访问该属性。然而,雄辩 在查询父模型时可以“急切加载”关系。 急切加载缓解了N + 1查询问题。
这是检查用户是否具有特定角色的正确方法。您应该完整阅读spatie/laravel-permission
以了解其用法。
if ($whichuser2->hasRole('admin')) { ... }