Laravel 5.1。*自定义枢轴类阵列未铸造

时间:2015-09-15 06:58:30

标签: mysql casting eloquent pivot-table laravel-5.1

我有Model名为User,另一名Model名为Roles,他们通过belongsToMany关系相互关联。但我需要cast某些pivot属性,因此我使用了自定义数据透视表RoleUserPivot,其基本如下:

...
use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUserPivot extends Pivot
{

    protected $casts = [
        'active' => 'boolean',
        'permissions' => 'array',
    ];
}
...

UserRole模型中的关系定义如下:

...
// 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字段已正确转换为booleanpermissions字段不会转换为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)。

0 个答案:

没有答案