Laravel получить обмен сообщениями с Elouqent - PullRequest
0 голосов
/ 20 марта 2020

У меня есть три таблицы и модели

  1. Профиль
  2. Сообщения
  3. Пользователи

У меня три Модели 1. Профиль 2 Сообщение 3. Пользователи

profile table:    id|user_id|profile_image
messages table:  id|message|user_id|friend_id
user table  : id|name|etc

Я получаю только сообщения, но хочу получить эти сообщения с профилем и именем пользователя.

   $chat=Message::where(function ($query) use($id){
       $query->where('user_id',Auth::user()->id)->where('friend_id',$id);
    })->orWhere(function ($query) use($id){
        $query->where('user_id',$id)->where('friend_id',Auth::user()->id);
    })->get(); 

1 Ответ

1 голос
/ 20 марта 2020

То, что вы ищете, это relationships найдено здесь .

Вы должны определить отношения в модели, которой принадлежит любое количество других моделей или наоборот.

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

<?php

class Profile extends Model {

   // a profile belongs to an user
   function user()
   {
      return $this->belongsTo('App\Model\User', 'user_id');
   }
}

А затем в вашей User модели.

<?php

class User extends Model {

   // an user has many profiles
   function profiles()
   {
      return $this->hasMany('App\Model\Profile', 'id');
   }

   // an user has many messages
   function messages()
   {
      return $this->hasMany('App\Model\Message', 'id');
   }
}

И, наконец, в вашей Message модели.

<?php

class Message extends Model {

   // a message belongs to an user
   function user()
   {
      return $this->belongsTo('App\Model\User', 'user_id');
   }

   // a message was sent to one friend
   function friend()
   {
      return $this->hasOne('App\Model\Friend', 'friend_id');
   }
}

Вот как вы создаете отношения в Laravel, вы можете найти документацию здесь в зависимости от версии Laravel вы используете.

Наконец, вы можете использовать Eloquent, как это.

Profile::with('user)->get();

Message::with('user')->get();

$message = Message::find(1)->user()->where('etc', 'etc')->first();
...