我有Model
名为User
,另一名Model
名为Roles
,他们通过belongsToMany
关系相互关联。但我需要cast
某些pivot
属性,因此我使用了自定义数据透视表RoleUserPivot
,其基本如下:
...
use Illuminate\Database\Eloquent\Relations\Pivot;
class RoleUserPivot extends Pivot
{
protected $casts = [
'active' => 'boolean',
'permissions' => 'array',
];
}
...
User
和Role
模型中的关系定义如下:
...
// User Model
public function roles()
{
return $this
->belongsToMany('App\Role')
->withPivot(
'active',
'permissions'
);
}
public function newPivot(Model $parent, array $attributes, $table, $exists)
{
if ($parent instanceof Role) {
return new RoleUserPivot($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
...
同样地:
...
// Role Model
public function users()
{
return $this
->belongsToMany('App\User')
->withPivot(
'active',
'permissions'
);
}
public function newPivot(Model $parent, array $attributes, $table, $exists)
{
if ($parent instanceof User) {
return new RoleUserPivot($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
...
我遇到的问题是,active
字段已正确转换为boolean
,permissions
字段不会转换为array
,而是string
相同permissions
返回数据库中的1}}。我确保数据透视表已正确设置,TEXT
列是MySQL For Each user As var In UserList.Where(Function(u) u.Status = 1)
...
Next
列。
目前我使用的是Laravel 5.1.16(LTS)。