Отношение Laravel One-Many к 2 первичным ключам - PullRequest
0 голосов
/ 01 октября 2019

У меня 2 таблицы 1. Таблица пользователей

    id
    name
    ...
Таблица чатов
    id
    from_id // fk - id on users, the user sent the message
    to_id   // fk - id on users, intended user
    message_body

Теперь я пытаюсь настроить отношение Один-ко-многим, когда у пользователя много сообщений чата, а в сообщении чата два пользователя. от и до user

Как я могу определить это отношение ?. Мне нужно загружать пользователя.

Я пытался использовать Compoships , но это не сработало. Мой код

Модель пользователя

public function chats() {
    return $this->hasMany(Chat::class, ['from_id', 'to_id'], 'id');
}

Модель чата

public function user() {
    return $this->belongsTo(User::class, ['from_id', 'to_id'], 'id');
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2019
public function chats() {
  return $this->hasMany(Chat::class, 'from_id', 'id') + $this->hasMany(Chat::class,'to_id','id');
}

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

public function userTo() {
  return $this->belongsTo(User::class, 'to_id', 'id');
}
0 голосов
/ 01 октября 2019

Почему бы вам не сделать что-то подобное?

В вашей пользовательской модели установите два типа отношений:

public function chatsFrom() {
    return $this->hasMany('App\Chat', 'from_id');
}

public function chatsTo() {
    return $this->hasMany('App\Chat', 'to_id');
}

Затем в вашей модели чата также настройтедва отношения, одно к from и другое к to, оба ссылаются на модель пользователя. Например:

public function fromUser() {
    return $this->belongsTo('App\User', 'from_id');
}

public function toUser() {
  return $this->belongsTo('App\User', 'to_id');
}

Таким образом, вы можете получить доступ к отношениям, используя что-то вроде этого:

$user->chatsFrom();
$user->chatsTo();

$chat->fromUser();
$chat->toUser();

Дайте мне знать, помогло ли это вам.

...