Php 如何在雄辩的关系中建立关系Laravel
我有两张桌子 1-项目 id为5的用户创建了3个项目-这意味着他将与我们的不同代理进行3次独特的对话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
----------------------------------------
|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()调用的错误
您需要首先检索模型以获取模型上的关系,否则请尝试()。。所以它应该是bApp\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()
您需要首先检索模型以获取它的关系,否则请尝试()。。所以它应该是bApp\Chat::find(1)->project;或者App\Chat::where('id',$id)->first()->project代码>这个怎么样:$chat=\App\chat::where('id',$id)->first()
然后$chat->project
到目前为止,我发现这是最好的可用资源。。试试看!到目前为止,我发现这是最好的可用资源。。试试看!一个项目只能有一个对话,但可以有多个消息,这就是为什么如果您选中conversation
model hasbelongsTo
与项目的关系。试着实现这一点。我通过对话
添加了fetchproject
、creator
和agent
是的,我已经获得了项目的详细信息。现在,如果我需要代理或创建者的详细信息,该怎么办?我已经更新了我的答案,请尝试dd($chat->agent)代码>和dd($chat->creator)
确保打印并死亡,这样下一行就不会执行。$chat->agent和creator只返回他们的idA项目只能有一个对话,但有多个消息。这就是为什么如果您选中对话model具有belongsTo
与项目的关系。试着实现这一点。我通过对话
添加了fetchproject
、creator
和agent
是的,我已经获得了项目的详细信息。现在,如果我需要代理或创建者的详细信息,该怎么办?我已经更新了我的答案,请尝试dd($chat->agent)代码>和dd($chat->creator)代码>确保dd
打印并死亡,以便下一行不会执行。$chat->agent和creator只返回其id