如何使用数据库mongodb加入laravel中的3个表?

时间:2017-08-11 05:20:57

标签: mongodb laravel join

我们的应用程序有3个模型"通知"," Postlike"和"发布"

在通知模型中:

public function postlike()
{
    return $this->belongsTo('App\Models\PostLikes', 'postlist');
}
public function post()
{
    return $this->hasMany('App\Models\PostLikes', '_id', 'c_post_id');
}

在Postlike Model中:

public function postlist()
{
    return $this->hasMany('App\Models\Post', '_id', 'c_post_id');
}

在通知存储库中:(查询)

public function getnotification($userId)
{
     $notification = $this->makeModel()
     ->with('post') 
     ->with('postlike')
     ->with('notification')
      ->orderBy('created_at' , 'desc')
      ->where('replied_id', $userId)    
     ->get();

     return $notification;
}

有关更多信息,我们附上了以下图片 enter image description here

2 个答案:

答案 0 :(得分:1)

当我看到你的帖子时,我认为你的问题可以通过Laravel的内置eager loading解决,所以它可以让你做这样的事情:

$notification = $this->makeModel()
     ->with('post', 'postlike', 'postlike.postlist')
     //...
     ->get();

如果是你的情况,那么这些链接就可以解决问题:

https://laracasts.com/discuss/channels/eloquent/eager-load-multiple-nested-relationships

laravel eloquent eager load multiple nested relationships

我不确定,但对我来说似乎有点奇怪,'通知'模型与'Postlike'模型有两个关系。也许你应该考虑使用一些数据透视表。

希望它有所帮助,

答案 1 :(得分:0)

通知模型:

public function postlike()
{
    return $this->belongsTo('App\Models\PostLikes', 'c_post_id');
}

Query:

$notification = $this->makeModel()
{
    ->with('post', 'postlike', 'postlike.postlist')->get()
}