【问题标题】:Is Rails ORM working this way?Rails ORM 是这样工作的吗?
【发布时间】:2017-06-20 08:51:51
【问题描述】:

最近,我需要像 Active Record 一样实现 ORM,但使用的是 php。所以我想写的第一件事就是创建记录。只要将每条记录视为一个对象,您就可以将值直接分配给类属性,如下所示:

p = Product.new
p.name = "Some Book"

比创建方法调用。

那么,我想知道的是,如果 ActiveRecord 首先使用 "DESCRIBE table_name" 向数据库发送查询以查看它有哪些列,然后将它们转换为类属性?

如果是这样,这种方法对性能有好处吗(每次制作模型对象时都需要发送查询)?

【问题讨论】:

  • 相信php中有很多AR模式的实现。至于你的问题,可以从ActiveRecord::Base.connection.schema_cache开始

标签: php mysql ruby-on-rails activerecord orm


【解决方案1】:

不,当您创建 Model 类的新实例时,ActiveRecord 不会查询 db。在 ruby​​ 中,attr_accessor 有助于定义 getters 和 setters,在 Rails 中,您可以在控制台中验证为

p = Product.new
#=> #<Product id: nil, created_at: nil, updated_at: nil>

没有数据库调用,只是一个新的 Product 类对象。

【讨论】:

  • 我很困惑它允许用户将值传递给类(模型)的不存在属性。因此,它可能定义了一些 setter,当用户尝试设置某个属性时,它会被保存到某种数组中,该数组将在调用 CREATE 方法时触发,然后检查属性名称是否与表中的名称匹配,对?
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多