2

我有一个场景需要在一个模型中有两个多态关系。主要模型是 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',
            ];
        }

你能帮我解决这个问题吗?先感谢您 !

4

0 回答 0