数据库中的复杂关系(使用Laravel)

时间:2016-10-17 13:25:38

标签: php mysql database laravel

我想知道如何在表之间建立关系:

我有一张shops表和一张users表 我想关联到users表:商店(id)和区域(这是一组商店)。
我不知道如何以一种美丽而正确的方式做到这一点。

例如,我们可以通过非常复杂的方式:

区域A包含[区域B(3个商店)和区域C(1个商店)]和1个商店:共5个商店。
John是A区,X区和其他3家商店(没有区域)的合作伙伴。

如何在数据库中表示? 它就像一个递归的东西:(

先谢谢!

1 个答案:

答案 0 :(得分:0)

您可能希望拥有以下表格:

users
  - id
  - username

shops
  - id
  - name

areas
  - id
  - name
  - parent_id

user_shop
  - user_id
  - shop_id

area_shop
  - shop_id
  - area_id

然后,对于您的示例,行可能看起来像

users
  id: 1
  username: jappleseed

shops
  id: 1
  name: some shop name

  id: 2
  name: some other shop name

areas
  id: 1
  name: Area A
  parent_id: null

  id: 2
  name: Area B
  parent_id: 1

  id: 3
  name: Area C
  parent_id: 1

area_shop
  area_id: 2
  shop_id: 1

  area_id: 2
  shop_id: 2

然后你可以定义你的嵌套区域的关系,如:

class Area extends Model {

    /**
     * Parent Area
     */
    public function parent_area()
    {
        return $this->belongsTo('Area', 'parent_id');
    }

    /**
     * Child Areas
     */
    public function child_areas()
    {
        return $this->hasMany('Area', 'parent_id', 'id');
    }
}

其他关系应该相当直接。

这是未经测试的,可能需要稍微调整一下,但总体思路应该让你在那里。否则,使用预构建的嵌套集库也可以。