Как создать связь в красноречивых отношениях Laravel - PullRequest
0 голосов
/ 04 июля 2018

У меня есть два стола

1- проекты

Пользователь с идентификатором 5 создал 3 проекта - это означает, что он будет иметь 3 уникальных разговора с нашим другим агентом

----------------------------------------
|id | user_id |  title    | time       |
|1  |    5    |  Example  | 2018-06-30 |
|2  |    5    |  Example  | 2018-06-30 |
|3  |    5    |  Example  | 2018-06-30 |
----------------------------------------

2- разговор

-------------------------------------------
|id | project_id |  user_one | user_two   |
|1  |    1       |     5     |     3      |
|2  |    2       |     5     |     7      |
|3  |    3       |     5     |     10     |
-------------------------------------------

Всякий раз, когда создается проект, создается диалог с этим идентификатором проекта. Теперь в Laravel я хочу получить детали этого проекта с помощью Eloquent Relationships.

User_one - создатель проекта, а user_two - наш агент, назначенный этому продукту.

Это то, что я пробовал

class Chat extends Model {
 public function project()
    {
        return $this->belongsTo('App\ProjectModel');
    }
 }

class ProjectModel extends Model
{
   public $table = 'projects';
}

Вот функция контроллера

public function Progress($id){ // Id passed here is 2, so it should show detail of project number 2

    return \App\Chat::find($id)->project()->get();
}

После всего этого я получаю сообщение об ошибке - вызов функции-члена project () для null

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете попробовать вот так, создав 2 модели Project и Conversation

таблица

conversations(id, project_id, creator, agent)

Модель проекта

public function conversations(){
    return $this->hasMany('App\Conversation');
} 

Модель разговора

public function project(){
   return $this->belongsTo('App\Project', 'project_id');
} 


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

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

Данные выборки

public function Progress($id){ // Id passed here is 2, so it should show detail of project number 2
     $chats = Conversation::with('project', 'creatorUser', 'agentUser')->where('project_id', 2)->get();
     foreach($chats as $chat){
        dd($chat->project); //it will always print same project because we have filter the conversation by project_id
        dd($chat->creatorUser);
        dd($chat->agentUser);

     }

}
0 голосов
/ 04 июля 2018

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

class Chat extends Model {
 public function project()
    {
        return $this->belongsTo(App\ProjectModel::class, 'project_id', 'id');
    }
 }

и тогда вы сможете получить:

\App\Chat::where('id', $id)->first()->project;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...