【问题标题】:Could someone explain the ORM used in current web frameworks?有人可以解释当前 Web 框架中使用的 ORM 吗?
【发布时间】:2011-07-25 14:15:17
【问题描述】:

我对 ORM 很陌生,我有点理解这个定义。当我尝试实现关系时,困惑就开始了。

假设我有这两张表。

产品表:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| brand_id    | int(11)      | YES  |     | NULL    |                |
| name        | varchar(100) | YES  |     | NULL    |                |
| description | text         | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

品牌名称表:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| name       | varchar(100) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

如何使用$_has_many $_belongs_to 设置模型,以便当我使用$product1 = Model_Product::find('first'); 它还返回品牌名称,就像在 SQL 连接中一样。

或者我是不是走错了路。

这不必特定于fuelphp,我只是想在这种情况下如何设置ORM。

【问题讨论】:

  • 我认为您的第一个问题是您假设ORM实现都是相同的,概念应该相似,但实现取决于作者的意见。

标签: php ruby-on-rails orm fuelphp


【解决方案1】:

在fuelphp中你可以使用ORM simpli在模型文件中定义关系:

model/brand.php

class Model_Brand extends Orm\Model {

   protected static $_has_many = array(
        'products' => array(
            'model_to' => 'Model_Product',
            'key_from' => 'id',
            'key_to' => 'brand_id',
            'cascade_save' => false,
            'cascade_delete' => true,
        )
    );
}

model/product.php

class Model_Product extends Orm\Model {
    protected static $_belongs_to = array('brand');
}

当您执行$brand = Model_Brand::find('first'); 时,您可以使用$brand['products'] 访问产品列表

当您执行$product = Model_Product::find('first'); 时,您可以使用$product['brand'] 访问品牌

【讨论】:

    【解决方案2】:

    一个有点像 Rails 的例子是:

    class Brand
      has_many :products
    end
    
    class Product
      belongs_to :brand
    end
    
    product = Product.first
    product.brand
    => <#Brand...>
    brand = Brand.first
    brand.products
    => [<#Product...>, <#Product...>]
    

    这绝不是完整的代码,但希望你能明白。

    【讨论】:

    • 感谢您的帮助。我实际上希望对 SQL 中的实际连接有一个解释。
    • 您是否正在寻找如何执行包含两个表中数据的连接查询的示例?
    • 我知道。我对它与 ORM 的关系感到困惑。
    • 你的要求太宽泛了,你考虑过只看 ORM 的来源吗?
    猜你喜欢
    • 2015-07-30
    • 2015-03-30
    • 1970-01-01
    • 2012-05-29
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多