我一直在敲我的键盘大约2个小时,现在试图解决这个问题,我终于到了需要帮助的地方。
我希望Users
能够通过Alpha
表跟踪Beta
和Follows
模型。
理想情况下,代码可能如下所示:
$user = User::find(1);
$alpha = Alpha::find(1);
$beta = Beta::find(1);
$user->following()->save($alpha);
$user->following()->save($beta);
我已经尝试了这种方法,它具有规则的多态关系和多对多的多态关系,并且取得了不同程度的成功。无论我尝试过什么,我都无法完全意识到这一点,我认为只是精神疲惫阻碍了我。
答案 0 :(得分:1)
这在我看来就像Users
和Follows
之间的一对多关系,然后是Follows
和Alphas
/ Betas
之间的传统多态关系
表格结构
alphas
id - integer
name - string
betas
id - integer
name - string
follows
id - integer
user_id - integer
followable_id - integer
followable_type - string
users
id - integer
<强>模型强>
class Follow extends Model
{
public function followable()
{
return $this->morphTo();
}
public function user()
{
return $this->belongsTo(User::class);
}
}
class Alpha extends Model
{
public function follows()
{
return $this->morphMany(Follow::class, 'followable');
}
}
class Beta extends Model
{
public function follows()
{
return $this->morphMany(Follow::class, 'followable');
}
}
class User extends Model
{
public function follows()
{
return $this->hasMany(Follow::class);
}
public function alphas()
{
return $this->follows()->where('followable_type', Alpha::class);
}
public function betas()
{
return $this->follows()->where('followable_type', Beta::class);
}
}
保存关系
$user = User::find($uid);
$follow = new Follow([
'user_id' => $user->id
]);
$alpha = Alpha::find($aid);
$alpha->follows()->save($follow);