我有2个模型,即角色和用户模型。每个型号分别使用以下代码:
Role.php:
public function users(){
return $this->belongsToMany('\Models\User', 'rbac_user_roles','role_id','username');
}
...
user.php的:
public function roles(){
return $this->belongsToMany('\Models\RBAC\Role', 'rbac_user_roles','username','role_id');
}
但是当我尝试像这样转储数据时:
$model = Role::find( 1);
$model2 = User::find( 'test_user');
var_dump( $model->users->toArray() );
var_dump( $model2->roles->toArray() );
$ model-> users-> toArray()查找实际数据,而$ model2-> roles-> toArray()则不返回任何内容。这很奇怪,因为我非常确定代码是否正常工作。 有了这个,我想问一下,如果数据库的主键是一个雄辩的字符串会有效吗?因为我相信这是罪魁祸首。如果是这样,我该怎么做才能纠正这种情况呢?
情况需要/具备以下条件 - >无法为users表添加用于索引启用自动增量键的新列 - >所有表和数据都已正确设置,因为第一个var_dump()实际转储了正确的数据。
谢谢,
扬
编辑:
我在尝试获取用户时也尝试了以下内容:
$model2 = User::where( 'username', 'test_user')->get()->first();
注意:表Users的主键是字符串
答案 0 :(得分:0)
显然,Eloquent对非增量主键非常严格。您应该在Eloquent模型中将增量属性设置为false,如:
public $incrementing = false;