Php 自有ORM:加入时的数据库记录?
我们正在使用ORM功能开发我们自己的框架。数据库表现在是类,但是记录呢?让我们设想两张表:Php 自有ORM:加入时的数据库记录?,php,sql,orm,record,Php,Sql,Orm,Record,我们正在使用ORM功能开发我们自己的框架。数据库表现在是类,但是记录呢?让我们设想两张表: Users ID,USERNAME Emails USER_ID,ADDRESS 因此,一个记录对象将具有getID()、getUSERNAME()方法等,但如果这两个表被联接,它就不能有两种类型,对吗?因为没有多重继承。那么字段冲突呢?我认为每个类都应该表示一条记录,整个表应该是一个对象数组(或其他集合)。看一看,得到一些想法 对于JOIN,应该有一些定义别名的机制。这样,就可以处理场碰撞 对于ge
Users
ID,USERNAME
Emails
USER_ID,ADDRESS
因此,一个记录对象将具有getID()、getUSERNAME()方法等,但如果这两个表被联接,它就不能有两种类型,对吗?因为没有多重继承。那么字段冲突呢?我认为每个类都应该表示一条记录,整个表应该是一个对象数组(或其他集合)。看一看,得到一些想法 对于JOIN,应该有一些定义别名的机制。这样,就可以处理场碰撞
对于getter和setter,您可以使用
\uu call
、\uu get
和\uu set
。有关详细信息,请参阅。DBIx::Class通过为每个表提供一个类来处理此问题,并且联接由一个方法表示,该方法获取与另一个表匹配的对象
$myAddress = $myUser->emails->address;
我将根据的模型/ORM实现提供一些见解。以下是我的一些建议:
- 不要盲目地决定将函数映射到字段中。为什么不使用get('field')和set('field')。没有缺点(除了缺少IDE提示之外),但是您可以避免代码生成或捕获所有通常较慢的代码
- 加入时,您不一定需要多个对象。在我的ORM中,单个模型可以处理连接的表。这引入了透明度,当您调用$model->set('address')时,它可能与联接表相关联。对于子选择,我仍然使用动态查询的子实例,但对于连接,则不需要
- 我已经看到了继承的强大功能,以及在父模型中重新塑造父模型的能力。每张桌子都可以有一张桌子
- 模型和ORM应该分开,但应该紧密地结合在一起。我还成功地使用通用视图和通用控制器使一切都很好地发挥作用,这非常节省时间
希望这能帮助您找到自己的方法,或者决定不实现自己的ORM。这不是一项容易的任务。这里的确切问题是什么?在我看来,您应该拥有一个具有以下属性的
用户
实体:int-ID、字符串用户名、电子邮件[]电子邮件地址
。JOIN
只是填充emailAddresses
字段的一种方法。但我不想将整个表/行及其外键加载到数组中,这会占用很多内存