簡體   English   中英

多個外鍵引用一個主鍵

[英]Multiple foreign keys referencing to one primary key

我已經為此苦苦掙扎了幾個星期,但我似乎無法在任何地方找到答案。

我正在嘗試將三個外鍵引用到另一個表上的一個主鍵中。

以下是一些信息:

用戶表

|---------------------|
|        id           |
|---------------------|
|         1           |
|---------------------|
|         2           |
|---------------------|
|         3           |
|---------------------|

服務表

具有引用 user_id 的三個外鍵的服務表

|---------------------|------------------|------------------|------------------|
|        id           |     tenant       |  service_person  |     landlord     |
|---------------------|------------------|------------------|------------------|
|         1           |        1         |         2        |         3        |
|---------------------|------------------|------------------|------------------|

用戶 Model

    public function service(){
        return $this->hasMany(Service::class, 'id');
    }

服務 Model

    public function tenant(){
        return $this->belongsTo(User::class, 'id', 'tenant');
    }

    public function service_person(){
        return $this->belongsTo(User::class, 'id', 'service_person');
    }

    public function landlord(){
        return $this->belongsTo(User::class, 'id', 'landlord');
    }

因此,當我嘗試使用 tinker 查詢User::find()->service時,我的三個用戶中只有一個找到了結果,即 service_person。 其他的只是返回一個空的 object。

查詢結果:

>>> User::find(1)->service
=> Illuminate\Database\Eloquent\Collection {#3125
     all: [
       App\Service {#3156
         id: 1,
         tenant: 2,
         service_person: 1,
         landlord: 3
       },
     ],
   }
>>> User::find(2)->service
=> Illuminate\Database\Eloquent\Collection {#3165
     all: [],
   }
>>> User::find(3)->service
=> Illuminate\Database\Eloquent\Collection {#3166
     all: [],
   }

我想要實現的是尋找與該用戶相關的所有服務,無論該用戶是租戶、service_guy 還是房東,我都可以在前端顯示它。

關於如何實現這一目標的任何想法?

理想情況下,我不想建立多對多關系並創建 pivot 表。

先感謝您

我認為問題出在用戶 model 的關系上:

用戶 Model:

public function servicesTenants(){
return $this->hasMany(Service::class, 'tenant');
}
public function servicesPerson(){
return $this->hasMany(Service::class, 'service_person');
}
public function servicesLandlord(){
return $this->hasMany(Service::class, 'landlord');
}

現在,您可以嘗試:

$user=User::with(['servicesLandlord','servicesPerson','servicesTenants'])->find($user_id);

如果您想獲得所有 user 的服務而不管關系如何,您可以嘗試:

$userServices=Service::where('tenant',$user_id)->orWhere('service_person',$user_id)->
orWhere('landlord',$user_id)->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM