Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在雄辩的关系中建立关系Laravel_Php_Laravel - Fatal编程技术网

Php 如何在雄辩的关系中建立关系Laravel

Php 如何在雄辩的关系中建立关系Laravel,php,laravel,Php,Laravel,我有两张桌子 1-项目 id为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

我有两张桌子

1-项目

id为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     |
-------------------------------------------
无论何时创建一个项目,都会创建一个带有该项目id的对话,现在在Laravel中,我希望使用雄辩的关系来获取该项目的详细信息

用户1是项目创建者,用户2是我们分配给该产品的代理

这就是我尝试过的

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();
}

在所有这些之后,我得到了一个错误-调用null上的成员函数project()

您可以创建一个关系,同时指定外键和所有者键,如:

class Chat extends Model {
 public function project()
    {
        return $this->belongsTo(App\ProjectModel::class, 'project_id', 'id');
    }
 }
然后您将能够获得:

\App\Chat::where('id', $id)->first()->project;

可以在指定外键和所有者键的同时创建关系,如:

class Chat extends Model {
 public function project()
    {
        return $this->belongsTo(App\ProjectModel::class, 'project_id', 'id');
    }
 }
然后您将能够获得:

\App\Chat::where('id', $id)->first()->project;

您可以这样尝试创建两个模型
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 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);

     }

}

您可以这样尝试创建两个模型
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 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);

     }

}

收到对undefined method Illumb\Database\Query\Builder::project()调用的错误
您需要首先检索模型以获取模型上的关系,否则请尝试()。。所以它应该是b
App\Chat::find(1)->project;或者App\Chat::where('id',$id)->first()->project这个怎么样:
$chat=\App\chat::where('id',$id)->first()
然后
$chat->project
收到一个错误
调用undefined method Illumb\Database\Query\Builder::project()
您需要首先检索模型以获取它的关系,否则请尝试()。。所以它应该是b
App\Chat::find(1)->project;或者App\Chat::where('id',$id)->first()->project这个怎么样:
$chat=\App\chat::where('id',$id)->first()
然后
$chat->project
到目前为止,我发现这是最好的可用资源。。试试看!到目前为止,我发现这是最好的可用资源。。试试看!一个项目只能有一个对话,但可以有多个消息,这就是为什么如果您选中
conversation
model has
belongsTo
与项目的关系。试着实现这一点。我通过
对话
添加了fetch
project
creator
agent
是的,我已经获得了项目的详细信息。现在,如果我需要代理或创建者的详细信息,该怎么办?我已经更新了我的答案,请尝试
dd($chat->agent)
dd($chat->creator)
确保打印并死亡,这样下一行就不会执行。$chat->agent和creator只返回他们的idA项目只能有一个对话,但有多个消息。这就是为什么如果您选中
对话
model具有
belongsTo
与项目的关系。试着实现这一点。我通过
对话
添加了fetch
project
creator
agent
是的,我已经获得了项目的详细信息。现在,如果我需要代理或创建者的详细信息,该怎么办?我已经更新了我的答案,请尝试
dd($chat->agent)
dd($chat->creator)确保
dd
打印并死亡,以便下一行不会执行。$chat->agent和creator只返回其id