Как использовать условные отношения в красноречивом слове - PullRequest
2 голосов
/ 11 мая 2019

У меня есть таблица 'messages_message' и отдельная роль отправителя по столбцу 'sender_type' (администратор / пользователь). Оба администратора и пользователя в другой таблице. Но когда я вызываю модель, которая выдает ошибку Вызов функции-члена addEagerConstraints () для null


Столбец таблицы и данные

| id | id_group | id_reply | id_sender | sender_type | message 
| 1  | 1 | null | 3 | admin | Hi, I'm admin
| 2  | 1 | 1 | 3 | admin | I wanna give u promo
| 3  | 1 | 2 | 18 | user | What's promo ?

Я пробовал, если условно со значением столбца, но это не работает.

Conversation_message.php

public function sender(){
        switch($this->sender_type){
            case "user":
                return $this->belongsTo(User::class, 'id_sender', 'id');
            case "admin":
                return $this->belongsTo(Admin::class, 'id_sender', 'id');
            default:
                return;           
        }
    }

InboxController.php

public function message_detail_chat($groupId){
        $data = [];
        $data['messages'] = Conversation_message::with('replies')
                        ->with('sender')
                        ->with('recipients')
                        ->where(['id_group' => $groupId])->get();
}

Я предполагаю использовать условную модель по значению столбца sender_type, но фактический вывод неверен.

1 Ответ

0 голосов
/ 11 мая 2019

laravel предоставляет область запроса, которую вы можете прочитать здесь https://laravel.com/docs/5.8/eloquent#local-scopes

   function userSender(){
      $this->belongsTo(User::class, 'id_sender', 'id');
      }

     function adminSender(){

       return $this->belongsTo(Admin::class, 'id_sender', 'id');

     }

public function scopeSender($query)
{
    return $query
          ->when($this->sender_type === 'user',function($q){
              return $q->with('userSender');
         })
         ->when($this->sender_type === 'admin',function($q){
              return $q->with('adminSender');
         }); 

}

Теперь вы можете получить доступ к своему Отправителю следующим образом

     Conversation_message::Sender()->first();

Это должно дать вам правильного Отправителя.Надеюсь, поможет.

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