我现在有一个 user 表
user_id, uuid, user_name ...
有一个 tag 表
tag_id , tag_name ...
有一个中间表 tag_user
tag_id, user_uuid
如果按正常的 tag_user 中的对应键是 tag_id 和 user_id, 并且 两个表主表都是 使用 id 作为主键.
实际 我的 user 表 使用 uuid 来作为其他所有相关数据的关联 , tag 的主键 也是 tag_id
我如何自定义Pivot 中间表
我的 User Model
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
use Authenticatable, Authorizable, SoftDeletes;
public function tags() {
return $this->belongsToMany(Tag::class,'tag_user','tag_id','user_uuid')
->using(TagUser::class);
}
}
我的 Tag Model
class Tag extends Model
{
public function user() {
return $this->belongsToMany(User::class)->using(TagUser::class);
}
}
我的自定义 中间表 TagUser
use Illuminate\Database\Eloquent\Relations\Pivot;
class TagUser extends Pivot
{
protected $fillable = [
'tag_id',
'user_uuid',
];
protected $table = 'tag_user';
public $timestamps = false;
public function tag() {
return $this->belongsTo(Tag::class, 'tag_id', 'tag_id');
}
public function user() {
return $this->belongsTo(User::class, 'user_uuid', 'uuid');
}
我现在如果要创建一个 User , 获得
[
'user_id' => 41,
'uuid' => '01297c21-5a63-3529-8a29-409e712e4bee'
]
创建一个 Tag 获得
[
'tag_id' => 1,
'tag_name' => '红色'
]
User 设置主键 uuid
Tag 设置主键 tag_id
然后我怎么使用User Model 来填入关联表
我使用
User::find(41)->tags()->attach(1)
但是这样插入表中数据自动把 user->uuid 转成整形了
tag_id | user_uuid
------ | ---------
1 | 1297