Laravel 5 - Trait method can has not been applied, because there are collisions with other trai

1、Laravel 5 - Trait method can has not been applied, because there are collisions with other trait methods on App\User?





当使用的多个 trait 中包含了相同的方法名,将会发生冲突,冲突错误信息如下:

FatalErrorException in User.php line 43:
Trait method xxxxxx has not been applied, because there are collisions with other trait methods on App\Http\models\User

和 SoftDeletes 的 restore 冲突

由于 EntrustUserTrait 和 SoftDeletes 两个 trait 都包含 restore 方法,所以当我们对用户 Model 使用软删除的时候同时集成 Entrust 的时候就会导致冲突。

解决方法就是引用两个 trait 时为 restore 方法设置别名,然后重写一个 restore 方法,分别调用两个restore 方法。代码如下:

class User extends Model implements AuthenticatableInterface
{
    use Authenticatable;
    use EntrustUserTrait { EntrustUserTrait::restore as private restoreA; }
    use SoftDeletes { SoftDeletes::restore as private restoreB; }

    /**
     * 解决 EntrustUserTrait 和 SoftDeletes 冲突
     */
    public function restore()
    {
        $this->restoreA();
        $this->restoreB();
    }
}

和 Authorizable 的 can 冲突

解决办法是将 EntrustUserTrait 的 can 方法改一个别名,然后使用 Authorizable 中的 can,代码如下

use Authenticatable, CanResetPassword, PresentableTrait, Authorizable, EntrustUserTrait {
    EntrustUserTrait::can as may;
    Authorizable::can insteadof EntrustUserTrait;
}

2、RevisionableTrait conflicts with EntrustUserTrait?

然而EntrustUserTrait 中与RevisionableTrait 中的boot 重复造成  RevisionableTrait conflicts with EntrustUserTrait 的原因,解决办法

在user.php model 中可以使用
class User extends Authenticatable
{
    use Notifiable;
    use HasApiTokens;
    use RevisionableTrait;
    use EntrustUserTrait { 
        EntrustUserTrait::restore insteadof SoftDeletes;
        EntrustUserTrait::boot insteadof RevisionableTrait;
        }
    use SoftDeletes;
}

3、Trait method boot has not been applied, because there are collisions with other trait methods on App\Models\User?


  如果抛出了上面的 错误,就是boot重复了,可以看看第二个问题
4、The thing that bothers me is that I don't have deleted_at column in my user table?





如果出现deleted_at 错误,就是数据库少了deleted_at字段,你可以新增一个migration,添加这个字段



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值