Как вернуть объекты получателя и отправителя из модели User - PullRequest
0 голосов
/ 09 декабря 2018

Я создаю приложение, в котором есть раздел для общения пользователей.Естественно, у меня есть модель User для таблицы пользователей и модель Chat для сообщений.В модели чата у меня есть отношение ownTo к модели User и соответствующее отношение hasMany в модели User.В таблице чатов есть столбцы sender_id, receive_id и message.

Модели:

class User extends Model {
    function chat(){
        return $this->hasMany(Chat::class);
    }
}

class Chat extends Model {
    function user(){
        return $this->belongsTo(User::class);
    }

    /*** columns ***/
    /* sender_id
    * receiver_id
    * message
    */
}

Я в порядке, пока здесь.Однако в контроллере, когда чат сохраняется в таблице, я пытаюсь вернуть ответ чата, включая объекты отправителя и получателя, используя отношения, которые я создал в модели чата, но продолжает получать только объект отправителя.Я также попытался использовать аксессор на модели чата, например, так:

public function getReceiverAttribute(){ $receiver = User::find($this->receiver_id)->first(); return $receiver; }

Затем добавляет это в возвращенный чат.Все же я продолжаю получать объект отправителя.Надеюсь я смог четко выразить проблему?Как я могу получить объект получателя?

Примечание: пожалуйста, я отправляю это с мобильного телефона, поэтому он может быть неправильно отформатирован.

1 Ответ

0 голосов
/ 09 декабря 2018

Возможно, вы захотите разделить свои отношения в модели чата, как показано ниже:

class Chat extends Model {
    /*function user(){
        return $this->belongsTo(User::class);
    }*/

    function sender(){
        //tell the relationship which column they are related on on that table
        return $this->belongsTo(User::class, 'sender_id'); 
    }

    function receiver(){
        //same applies here
        return $this->belongsTo(User::class, 'receiver_id'); 
    }
}

То же самое относится и к пользовательской модели

class User extends Model {
    /*function chat(){
        return $this->hasMany(Chat::class);
    }*/

    function senderChat(){
        return $this->hasMany(Chat::class, 'sender_id'); //specify in both models just in case
    }

    function receiverChat(){
        return $this->hasMany(Chat::class, 'receiver_id');
    }
}

Я считаю, что это будет работать для вас, выпросто вызовет эти отношения из Chat объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...