gpt4 book ai didi

php - Eloquent Model 的关系不起作用;连查询都没有

转载 作者:行者123 更新时间:2023-12-03 21:14:42 25 4
gpt4 key购买 nike

我有一个处于子父关系中的用户和角色模型,如下面的代码所示。发生的情况是我可以通过父级访问子级,但反之则不行。访问 child 的角色 ($user->role) 只会给我 ID。角色列在角色表上有一个外键,但相反的外键不起作用。基本上,$role包含所有用户$user->role 不显示用户的角色,只显示他的 id

Laravel-Debugbar 另外显示用户不执行额外的查询,而角色则执行。

用户表

id
姓名
电子邮件
密码
记住 token
客户
角色
创建时间
更新于

角色表

id
姓名
显示名称
描述
创建时间
更新于

用户模型

namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Laratrust\Traits\LaratrustUserTrait;
use App\Client;
use App\Role;
use App\Permission;

class User extends Authenticatable
{
use LaratrustUserTrait;
use Notifiable;

protected $fillable = [
'name', 'email', 'password','role',
];
public function client(){
return $this->hasOne('App\Client', 'client');
}
public function role(){
return $this->belongsTo('App\Role')->withDefault();
}
}

榜样

namespace App;

use Laratrust\Models\LaratrustRole;
use App\Permission;
use App\User;

class Role extends LaratrustRole
{
protected $fillable = [
'name', 'display_name', 'description',
];
public function GetHasPermission($perm){
return DB::table('permission_role')->where('role', $this->id)
->where('permission',$perm)->first()->value('type');
}
public function users(){
return $this->hasMany('App\User','role', 'id');
}
public function permissions(){
return $this->hasMany('App\Permission');
}
public function getName(){
return $this->name;
}
}

编辑:应该注意的是,我正在使用 Laratrust。

最佳答案

因为您没有关注Laravel naming conventions ,您需要手动定义外键。因此,将 role() 关系更改为:

public function role()
{
return $this->belongsTo('App\Role', 'role')->withDefault();
}

https://laravel.com/docs/5.5/eloquent-relationships#one-to-many-inverse

然后使用->role()->first()而不是->role->role() 直接使用关系。 ->role 首先尝试使用对象的属性,如果不存在,则会加载相关数据(对象或集合)。由于 User 对象具有 role 属性,Laravel 使用它而不是加载相关的 Role 对象。

关于php - Eloquent Model 的关系不起作用;连查询都没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com