Я боролся с этим пару недель и, похоже, нигде не могу найти ответ.
Я пытаюсь сослаться на три внешних ключа в один первичный ключ в другой таблице.
Вот некоторая информация:
Таблица пользователей
|---------------------|
| id |
|---------------------|
| 1 |
|---------------------|
| 2 |
|---------------------|
| 3 |
|---------------------|
Таблица обслуживания
Таблица обслуживания с три внешних ключа, ссылающиеся на user_id
|---------------------|------------------|------------------|------------------|
| id | tenant | service_person | landlord |
|---------------------|------------------|------------------|------------------|
| 1 | 1 | 2 | 3 |
|---------------------|------------------|------------------|------------------|
Модель пользователя
public function service(){
return $this->hasMany(Service::class, 'id');
}
Сервисная модель
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');
}
Итак когда я пытаюсь сделать запрос с User::find()->service
с помощью tinker, только один из трех моих пользователей находит результаты, это service_person. Другие просто возвращают пустой объект.
Результат запроса:
>>> 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 или арендодателем, поэтому я могу показать его на внешнем интерфейсе.
Есть идеи, как мне этого добиться?
В идеале я не знаю Я хочу создать отношения «многие ко многим» и создать сводную таблицу.
Заранее спасибо