我有一个场景需要在一个模型中有两个多态关系。主要模型是 Calls,其中包括 Caller 和 Callee。Caller 和 Callee 可以是用户、买方或卖方。所以我设计了我的桌子,如下所示。
class Call extends Model
{
public function caller()
{
return $this->morphTo();
}
public function callee()
{
return $this->morphTo();
}
}
我像这样创建了我的用户模型
class User extends Authenticatable
{
public function buyers()
{
return $this->hasMany(Buyer::class);
}
public function outgoingCalls()
{
return $this->morphMany(self::class, 'caller');
}
public function incomingCalls()
{
return $this->morphMany(self::class, 'callee');
}
}
并创建了我的买家和卖家模型,例如,
class Buyer extends Model
{
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function outgoingCalls()
{
return $this->morphMany(self::class, 'caller');
}
public function incomingCalls()
{
return $this->morphMany(self::class, 'callee');
}
}
所以,当用户像这样打电话给买家时,我想保存一个电话
Auth::user()->buyers()->find($args['buyer_id'])->outgoingCalls()->save()
并在买家或卖家致电用户时保存通话
Buyer::find(2)->user()->outgoingCalls()->save()
我的问题是我不能让它像我想要的那样工作所以我不得不这样做,
$userCall = new UserCall([
'caller_id' => Auth::user()->id,
'caller_type' => User::class,
'status' => 1,
'started_at' => '2020-06-24 01:00:00',
'ended_at' => '2020-06-24 02:00:00',
]);
if (Auth::user()->buyers()->find($args['buyer_id'])->incomingCalls()->save($userCall)) {
return [
'status' => 'SUCCESS',
'message' => 'User Call successfully saved',
];
}
你能帮我解决这个问题吗?先感谢您 !