在我的应用中,我有2种对话类型:用户之间的普通私人对话和对用户产品感兴趣的人们的对话。
在用户模型中,我声明了以下关系:
public function conversations()
{
return $this->belongsToMany('App\Conversation', 'conversation_user');
}
public function conversationsProduct()
{
return $this->belongsToMany('App\ConversationProduct', 'conversation_product_user', 'user_id', 'product_id');
}
其中“ conversation_user”和“ conversation_product_user”是“ users”-“ conversation”和“ users”-“ conversations_product”表之间的数据透视表。
我的session_user数据透视表具有session_id和user_id表属性,但是session_product_user数据透视表具有其他属性product_id。
在我的会话模型中,我有:
public function users()
{
return $this->belongsToMany('App\User');
}
public function messages()
{
return $this->hasMany('App\Message');
}
在ConversationProduct模型中,我写道:
protected $table = 'conversations_product';
public function users()
{
return $this->belongsToMany('App\User', 'conversation_product_user');
}
public function messages()
{
return $this->hasMany('App\MessageProduct');
}
在我的ConversationProductController中,我可以找到用户对话:
public function showUserConversationsProduct(Request $request){
$user_id = $request->user_id;
//var_dump($user_id);
$userData = User::where('id', $user_id)->with('conversationsProduct')->first();
}
这是我的问题:在控制器中-> with('conversationsProduct')的关系与session_product_user无关,但与session_user数据透视表有关。如果我在关系中添加第二个参数作为“ conversation_product_user”,我就无法解决它为什么发生的情况:
public function conversationsProduct()
{
return $this->belongsToMany('App\ConversationProduct', 'conversation_product_user', 'user_id', 'product_id');
}
我需要受保护的$ table ='conversations_product';将我的ConversationsProductController @ store指向保存对话的位置,但是我认为识别适当的关系可能会有问题。
非常感谢您的帮助。我附上我的数据库关系照片。