【问题标题】:How to structure related models in laravel 4如何在 laravel 4 中构造相关模型
【发布时间】:2014-01-31 03:36:37
【问题描述】:

我无法弄清楚如何处理具有“动态”相关模型的模型。

有一个模型名为Group

创建组时,您可以进行 GroupGameGroupGamer。这由 Group 模型中的 group_type 指定。所以类型 1 与 GroupGame 相关,而类型 2 与 GroupGamer 相关。

  1. 我应该在这里做一个多态关系吗?并将共享组表的 GroupGame 和 GroupGamer 的父级反转?或者有 Group 父级,它有一个相关的 GroupGame 或 GroupGamer 模型。

我有其他模型,如新闻、媒体等,我计划使用它的 id 与 Group 模型相关。

要点:https://gist.github.com/intradox/55cebe406a0e5c5c69cb

只是不确定如何以正确的方式进行。希望这是有道理的。

【问题讨论】:

  • 你的问题我不清楚,你能不能用一些代码更清楚。 When creating a group you can do a GroupGame or GroupGamer 是什么意思?
  • 这里有一些示例代码/类的要点。它有帮助吗? gist.github.com/intradox/55cebe406a0e5c5c69cb

标签: php laravel laravel-4 entity-relationship


【解决方案1】:

关于你的问题的第一部分,多态关系是要走的路。您创建 GameGamer 模型,它们都需要是“groupable”类型,其将由“groupable_type”字段确定。在上述情况下,您使用 3 个表格 - GamerGame 和 poly Group 表格。

//example table structure
    CREATE TABLE `group` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(255) NOT NULL,
      `description` varchar(255) NOT NULL,
      `groupable_id` int(11) unsigned NOT NULL,
      `groupable_type` varchar(255) NOT NULL,
      `created_at` datetime NOT NULL,
      `updated_at` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

//app/models/Group.php
class Group extends Eloquent {

    protected $table = 'group';

    public function groupable()
    {
        return $this->morphTo();
    }

}

//app/model/Gamer.php
class Gamer extends Eloquent
{
    ...

    public function group()
    {
        return $this->morphMany('Group', 'groupable');
    }

    ...
}

//app/model/Game.php
class Game extends Eloquent
{
    ...

    public function group()
    {
        return $this->morphMany('Group', 'groupable');
    }

    ...
}

至于其他模型,这将与组有关,情况相同 - 您可以发挥魔力,还可以使它们“可分组”,这将使您能够将所有组详细信息存储在一个表中。

//app/model/News.php
class News extends Eloquent
{
    ...

    public function group()
    {
        return $this->morphMany('Group', 'groupable');
    }

    ...
}

【讨论】:

  • 我对 morphMany 感到困惑。每组将只有 1 场比赛或 1 名玩家。基本上它是一个组,但取决于类型,对于游戏玩家或游戏会有额外的属性。我的理解是,当你有一个包含多个组的游戏然后你调用一个游戏并调出它的所有组时,多态会很好。但这是 1:1。
  • 查看这篇文章,了解基本多态性使用的典型示例:maxoffsky.com/code-blog/…
  • 感谢您的帮助。由于我似乎无法提取相关模型的数据,因此我分成了一个关于抓取数据的单独问题:stackoverflow.com/questions/21487145/…
猜你喜欢
  • 2014-06-01
  • 2013-08-07
  • 1970-01-01
  • 2014-08-29
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2014-02-12
相关资源
最近更新 更多