【问题标题】:Datamapper (Overzealous Edition), Codeigniter and Has Many ClarificationDatamapper (Overzealous Edition)、Codeigniter 和有很多澄清
【发布时间】:2010-08-17 02:46:37
【问题描述】:

首先,我想说明我是 ORM 菜鸟。我一生中从未使用过 ORM,并且在我的日常开发中达到了需要做一些疯狂的高级关系的地步,我相信 Datamapper Overzealous Edition 可以在我使用 Codeigniter 时帮助我。

在我的数据库中,我有以下表格;

用户
项目
客户
任务

这是我想要的表格之间的关系;

  • 一个用户可以属于多个项目。
  • 一个项目可以有多个任务,但只能有一个客户。
  • 一个客户可以有很多用户,也可以有很多项目
  • 一个任务只能有一个项目

我试图在模型目录中设置我的模型,因为它在文档中说模型名称末尾没有 s,所以对于用户我有一个 user.php 模型等等。

我知道文档很棒,但我似乎无法正确理解它,即使它显然很容易。我知道您通过例如 $u = new User(); 来实例化模型;在您的控制器内部,但我的问题是设置模型内部的关系。

我如何设置我的模型以具有上述关系,例如,当我获取一个任务时,我可以看到它属于哪个项目以及来自其关联数据库表的一整堆信息。

我注意到在文档中,您在项目模型中使用了以下内容,这应该告诉它它可以为一个项目执行多个任务; var $has_many = array('task')

这就是全部吗?是否像定义 $has_many 和 $has_one 变量并将关联的模型名称放入数组中一样简单?

【问题讨论】:

    标签: php mysql codeigniter codeigniter-datamapper


    【解决方案1】:

    我从未使用过这种特殊的 ORM,但我确实使用过 Doctrine。如果您使用的那个以几乎相同的方式工作,那么您问题的简单答案是 - 是的!使用 Doctrine,您可以在模型类中设置所有关系。然后 ORM 将为您管理这一切。因此,例如,如果您实例化一个新的任务对象... $task = 新任务(); 然后您可以通过简单地编写来访问与 Project 表的关系 $task->项目;

    我必须强调,上面的代码不是为 datamapper 编写的,因此可能无法按原样工作,但我希望它能为您解决问题。听起来您确实了解文档,但就是不相信!!!!

    【讨论】:

    • 虽然它们都是不同的 ORM,但我认为它们在访问表和检索相关字段数据的方式上具有相似的语法。我猜所有的 ORM 都遵循将数据库表转换为对象的相同方法,无论什么 ORM,底层方法都是相同的。供其他人参考的 Datamapper 是用 Ruby 编写的,但我使用的是它的 PHP 实现。感谢您的帮助,我只需要保证并意识到我确实了解文档。
    【解决方案2】:

    只要你的数据库结构符合 Datamapper Overzealous 所期望的布局,这就是你所要做的。

    我一直在我一直在构建的项目中使用此 ORM,并且在大多数情况下,它非常有用且节省了时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多