【问题标题】:Complex relations in database (with Laravel)数据库中的复杂关系(使用 Laravel)
【发布时间】:2016-10-17 13:25:38
【问题描述】:

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

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

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

A 区包含 [B 区(3 家商店)和 C 区(1 家商店)] 和 1 家商店:总共 5 家商店。
John 与 A 区、X 区和其他 3 家商店(无区域)有关联。

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

提前致谢!

【问题讨论】:

  • 我会创建这些表:USER、AREA、SHOP、AREA_TO_SHOP、AREA_TO_USER、SHOP_TO_USER
  • 我认为您希望为区域表实现嵌套集模式,这将为您提供一个支持多个嵌套区域的结构,该结构可以根据需要进行深入。 github.com/etrepat/baum 使用它,您应该只需要一个 users 表、areas 表和 shops 表。

标签: php mysql database laravel


【解决方案1】:

您可能需要以下表格:

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');
    }
}

其他关系应该是相当直接的。

这是未经测试的,可能需要稍作调整,但总体思路应该可以帮助您实现目标。否则,也可以使用预构建的嵌套集库。

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多