2017-06-20 56 views
2

最近,我需要像活动记录一样实现ORM,但使用PHP。所以我想写的第一件事就是创建记录。只要每个记录像对待一个对象,你可以将值直接进入类属性,像这样:Rails ORM是以这种方式工作的吗?

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

而不是所谓的创作方法。

所以,我想知道,如果ActiveRecord首先发送查询到数据库"DESCRIBE table_name"看看它有什么列,然后把它们变成类属性?

如果是这样,这种方法是否有利于性能(每次创建模型的对象时都需要发送查询)?

+0

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

回答

1

不,ActiveRecord在您创建Model类的新实例时不会查询db。在Ruby中,attr_accessor有助于确定getter S和setter s,在轨道您可以在控制台验证为

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

没有DB调用,只是一个新的产品类对象。

+0

我很困惑,它让用户可以将值传递给类(模型)的未知属性。所以,可能会定义一些setter,当用户试图设置某个属性时,它会被保存到某种数组中,这会在调用CREATE方法时触发,然后检查属性名称是否与表中的名称匹配? – Src

相关问题