【问题标题】:eloquent: how to handle conditional relationship雄辩:如何处理条件关系
【发布时间】:2020-09-14 08:20:37
【问题描述】:

我有一个名为“requests”的表用于处理客户的请求,它可以由不同类型的用户(供应商、客户)创建。

知道每种类型的用户都有自己的表,我想在“请求”和createdBy用户之间建立关系,但是这种关系是有条件的,所以如果user_type = 1,createdBy用户是供应商,而如果 user_type = 2,则 createdBy 用户是客户。

这是我迄今为止尝试过的:

public function createdBySupplier()
    {
        return $this->belongsTo(Supplier::class, 'createdBy')
        ->distinct()
        ->select('suppliers.*')
        ->join('requests', function($join) {
            $join->on('requests.createdBy', '=', 'suppliers.id')
                ->where('requests.user_type', '=', 1);
        });
    }

    public function createdByCustomer()
    {
        return $this->belongsTo(Customer::class, 'createdBy')
        ->distinct()
        ->select('customers.*')
        ->join('requests', function($join) {
            $join->on('requests.createdBy', '=', 'customers.id')
                ->where('requests.user_type', '=', 2);
        });
    }

我想要的是只有一个名为“createdByUser()”的关系,它应该知道如何根据“user_type”属性处理关系,有什么想法吗?

【问题讨论】:

    标签: eloquent eloquent-relationship


    【解决方案1】:

    requests 表创建一个模型并在其中建立关系:

    public function createdBySupplier()
    {
        return $this->belongsTo(Supplier::class, 'createdBy');
    }
    
    public function createdByCustomer()
    {
        return $this->belongsTo(Customer::class, 'createdBy');
    }
    
    public function createdByUser()
    {
        return $this->user_type === 1 ? 
            $this->createdBySupplier() :
            $this->createdByCustomer();
    }
    

    然后使用它:

    Requests::find(1)->createdByUser;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多