2017-02-23 41 views
0

我有一个雄辩的多对多的关系,我想使用attach()来轻松创建role_permissions数据,但问题是我使用UUID为我的ID和它引发错误字段'id'没有默认值。任何劫持attach()方法的方法?所以我可以设置我的UUID?Laravel雄辩的附加自动生成随机ID

我的迁移

Schema::create('role_permissions', function (Blueprint $table) { 
     $table->increments('count')->unique(); 
     $table->string('id')->unique(); 
     $table->string('role_id'); 
     $table->string('permission_id'); 
     $table->timestamps(); 
    }); 

我的模型

class Role extends Model 
{ 
    // 
public $incrementing = false; 

public function users() 
{ 
    return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id'); 
} 

public function permissions() 
{ 
    return $this->belongsToMany('App\Permission', 'role_permissions', 'role_id', 'permission_id'); 
} 
} 

我的代码附加

$role->permissions()->attach($permission_ids); 

我知道这里的问题是,我的ID是不是一个递增的数字它是一个唯一的字符串。我的问题是如何“注入”该唯一字符串attach()方法?感谢你们。

+0

如果您已经正确设置了您的模型和数据库,这应该不成问题,您可以发布数据库和模型代码吗? –

+0

你可以发布你的代码吗? – Paras

+0

基本上没有模型,因为我使用的是多对多的关系。所以附件只会创建一个查询并执行它。 –

回答

1

错误

场“身份证”没有默认值

指的是事实,你的数据库不知道没有指定时,它是如何填补id领域。

要么你编辑架构添加一个可空:

Schema::create('role_permissions', function (Blueprint $table) { 
    $table->increments('count')->unique(); 
    $table->string('id')->unique()->nullable(); // Bad idea 
    $table->string('role_id'); 
    $table->string('permission_id'); 
    $table->timestamps(); 
}); 

或通过连接其注入:

$role->permissions()->attach($permission_ids, ["id" => null]); 

更多信息on Laravel official doc

更新

对于未来开发人员w浩遇到这样的问题,你还可以设置附加阵列里的任何东西,例如:

$role->permissions()->attach($permission_ids, ["id" => Uuid::generate()]); 

更新2

还有一个更清洁的方式来处理这是诚实的。我会尽力解释它。

您可以通过简单地钩住boot方法处理该事件服务提供商内部的透视事件

这里有一个片断

/App/Providers/EventServiceProvider.php 
    public function boot() 
    { 
    Pivot::creating(function($pivot) { 
     if ($pivot->getTable() == 'role_permissions') { 
      $pivot->id = Uuid::generate(); 
     } 
    }); 
    } 

注意我不知道这实际上可能在你的laravel版本上。 Mine(5.4。*)按预期工作

+0

这可以工作,但id的值将会重复。我不想将id设置为null。 –

+0

得到它的工作。我做到了。 的foreach($ permission_ids为$ permission_id) \t { \t \t $角色的>权限() - >连接($ permission_id,[ “ID”=> UUID ::产生()]); \t} –

+0

很高兴听到您了解解决方案。 –

0

好吧设法修复它,我在@Claudio Ludovico Panneta的提示帮助下做了什么。

foreach($permission_ids as $permission_id) 
    { 
     $role->permissions()->attach($permission_id, ["id" => Uuid::generate()]); 
    } 
+0

我已经更新了我的答案 –