将模型与两个其他模型之间的M:M关系相关联

时间:2017-07-03 02:39:57

标签: database laravel data-structures data-modeling

我正在使用Laravel 5.1为API修改有助于教授语言的游戏的数据模型。我的目标是允许用户点击地图(假设他们点击China),然后选择该国家/地区的区域设置(假设Mandarin),然后选择与该国家/地区相关联的所有级别将被加载。

备注

  • 我不能将多个区域设置关联到一个国家/地区,因为多个国家/地区共享相同的区域设置。

  • 我无法将多个国家/地区关联到一个区域设置,因为每个国家/地区都有多个区域设置

  • 我可能想要为多个语言环境重用地图(中文1级)(所以我不需要重做地图,只需加载新对话框)

所以我的想法是创建一个名为GameLocal的新M:M模型和名为game_locale_level的表,这样我就可以通过ID将多个级别连接到多个game_locales。 But I know M:M models are a no-no。那么如何实现这种数据模型结构?

Game_Locale表:

- When I load a game (China), choose which locale to load (Mandarin)
    - ID 1 - Game: 1 (China) — locale: 1 (Mandarin)
    - ID 2 - Game: 1 (China) — locale: 2 (Cantonese)
    - ID 3 - Game: 2 (Taiwan) — locale: 1 (Mandarin)

- Load all levels that are associated where game ID = x and locale ID = y

Game_Locale_Level表:

- Make a new M:M table: game_locale_level: game_locale_id, level_id which 
  references the above 

    - game_locale_id: 1 (China - Mandarin) - level: 1 (Chinese level 1)  
    - game_locale_id: 1 (China - Mandarin) - level: 2 (Chinese level 2)
    - game_locale_id: 2 (China - Cantonese) - level: 1 (Chinese level 1)

更新:我认为Laravel 5.4可能有我想要的,但我需要升级:Defining Custom Intermediate Table Models

  

如果您想定义一个自定义模型来表示   您的关系的中间表,您可以调用using方法   在定义关系时。用于表示的所有自定义模型   中间关系表必须扩展   照亮\数据库\ Eloquent \ Relations \ Pivot类

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class Role extends Pivot
{
    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany('App\User')->using('App\UserRole');
    }
}

0 个答案:

没有答案