一篇属于许多企业的帖子

时间:2018-06-29 10:20:27

标签: php mysql database laravel

我有一个结构类似于以下数据库的数据库(如果图不完全清楚,请您道歉)。

DB diagram

统计信息,favourite_likes和category_links与posts表都具有多态关系。一个企业可以有很多帖子,而一个帖子可以有很多日期。

仅当帖子日期表中有将来的日期时,该帖子才会出现在网站的前端。

问题是我需要更改此设计,以便将一个帖子与许多企业链接起来,这似乎很简单,但是存在许多问题:

  • 每个邮政和企业都有一个coords空间列,此列用于网站前端上最近的我搜索。如果后端用户不输入任何内容,则coords列对于用户是可选的,系统只会从业务中复制coords。因此,如果我有一个链接到许多企业的帖子,那么它将需要存储多个坐标。

  • 此外,我们网站上的用户将希望查看帖子在不同区域的效果,这是当前可行的,因为每个帖子都链接到一行统计信息。如果我有一篇文章链接到许多企业,那么用户将只看到该文章的整体统计信息,而不是按位置。

我们的数据库非常复杂,我需要一种使帖子能够链接到许多企业的方法,该方法既简单又不会使事情复杂化。该系统内置于Laravel中,因此Eloquent可以更轻松地设置关系。

我们将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以通过将软线列从帖子表移动到数据透视表来定义帖子和业务之间的ManyToMany关系,以便每个cordspost关系都有business

  

帖子模型

public function businesses(){
    return $this->belongsToMany(Business::class, 'business_post')->withPivot('cords');
}

public function statistic(){
    return $this->hasOne(Statistic::class);
}

public function dates(){
    return $this->hasMany(PostDate::class);
}

数据透视表 business_post(id,post_id,business_id,软线)

  

商业模式

public function posts(){
    return $this->belongsToMany(Post::class, 'business_post')->withPivot('cords');
}
  

获取数据

$posts = Post::with('businesses','statistic','dates')->get();

类似地,您可以为其他模型定义

详细信息https://laravel.com/docs/5.6/eloquent-relationships#many-to-many