РЕДАКТИРОВАТЬ
Чтобы уточнить: я ищу решение, которое будет работать с быстрой загрузкой и сможет использовать все существующие функции Отношения в Ларавеле. Я знаю, что могу использовать атрибуты доступа и другие обходные пути, но не могу понять, как это сделать и заставить это работать ТОЧНО, как любые другие отношения Laravel.
Есть ли способ создать связь в модели Laravel, используя условие «ИЛИ» для поля, используемого для соединения таблицы при загрузке красноречивой модели?
Пример таблицы: user_connections
Имя
Тип
id
bigInt|primary|auto_increment
from_user_id
bigInt
to_user_id
bigInt
создано_at
метка времени?
updated_at
метка времени?
Если у меня есть модель Laravel с именем UserConnection, которая использует приведенную выше схему таблицы, есть ли способ определить связь с ней модель, которая может использовать либо поле from_user_id ИЛИ поле to_user_id.
Цель состоит в том, чтобы иметь связь с именем userConnections в модели User, которую можно привязать к любому полю.
Пример желаемого синтаксиса:
Код: Выделить всё
class User {
...
// THE RELATIONSHIP METHOD NAME TO USE (DOESN'T HAVE TO BE `hasMany`)
public function userConnections(){
return $this->hasMany(
\App\Models\UserConnection::class, /* THE TARGET CLASS TO BE LOADED */
'from_user_id||to_user_id', /* JOIN ON EITHER OF THESE FIELDS */
'id' /* THE ID OF THE USER IN THIS MODEL */
);
}
Пожалуйста, не отвечайте, если ваш ответ будет "Не структурируйте базу данных таким образом", потому что я не могу изменить схему. Мне нужно выяснить, как заставить ее работать с этой схемой.
Моя концепция не высечена в камне, как схема, но она должна иллюстрировать то, чего я пытаюсь достичь. Я полностью открыт для любого решения, которое работает с этой схемой базы данных.
Надеюсь, что кто-то еще сталкивался с подобной проблемой и может найти решение.
Заранее спасибо всем, кто дочитал до этого места.
Подробнее здесь: https://stackoverflow.com/questions/782 ... ning-field
Мобильная версия