Solar Model数据库操作之添加数据
来源:互联网 发布:hive sql与sql 编辑:程序博客网 时间:2024/04/29 15:18
Solar Model数据库操作之添加数据
- Solar Model数据库操作之添加数据
- 1对1添加数据
- actionAdd()源码
- 解析
- 1对多添加数据
- actionAddScores()源码
- 解析
- 多对多数据添加
- actionAdd()源码
- 解析
- 1对1添加数据
1对1添加数据
这里我们新添加一篇文章作为示例来说明1对1的数据添加情形。
- 该示例涉及的Model有: Articles、Contents。
- Articles与Contents的关系是1:1。
- Articles的字段有:id, title, author, user_id, created_time。
- Contents的字段有:id, article_id, body。
- 在Articles模型中添加了
$this->_hasOne('contents')
的关系。
actionAdd()源码
解析
得到新记录:$this->item = $this->_model->articles->fetchNew()
, $this->item
是Admin_Model_Articles_Record
对象,也是Solar_Struct
的对象。该对象里有关于模型Articles的字段属性,则有:id
, title
, user_id
, author
, created_time
这些属性。
但是因为在模型Articles中添加了有1Content的关系,所以$this->item
还有一个content
的属性,该属性是一个Admin_Modle_Contents_Record
的对象,即:$this->item->content = $this->_model->contens->fetchNew()
。那么类似$this->item->content这个对象就有模型Contents中的字段属性,即:id
, body
, article_id
。
定位到这段代码:
先获取post过来的数据,其中'article'是表单名的前缀,表单名由model[字段名]
组成。$this->item->content->body = $data['content']
因为怕$this->item->load($data)使$this->item->content
对象变成string类型,所以要手动的为$this->item->content->body
赋值!再将$data['content']
注销掉再$this->item->load($data)
。
$this->item->save()
,这段是保存的代码,先将数据插入到articles表中,得到刚插入记录的id,再赋给$this->item->content->article_id
, 这样就将articles与contents表联系起来了。
最后顺提一句,保存后最好是跳转到edit修改页面,修改刚才添加的文章。
1对多添加数据
为了说明1对多的情形,我们新添一张表scores,表示成绩表,因为每个学期都有成绩,所以1个用户有多个成绩。
- scores表的字段有:
id
,user_id
,team
,score
(team
表学期,比如‘2010上'; 'score'表分数)。 - 为scores表建立模型Scores。
- 在模型Users中添加与模型Scores的关系:
$this->_hasMany('scores')
。
*scores*表SQL源码如下:
actionAddScores()源码
这里我们要讨论的是在添加用户的时候要添加该用户的成绩。
解析
因为这里主要是说怎么对1对多的数据同时添加,也就是同时添加了users
和scores
两张表,所以我们主要讨论以下这几行代码:
在1对1的关系中我们添加文章的内容是通过$artilce->content->body = $data['body']
来添加的,在1对多的关系中我们是通过$user->scores[]['team'] = $data['team']
来添加的,这好像是添加多维数组一样,上面只对一个用户添加了一条score记录,如果想添加两条怎么办呢?类似,可以采用以下代码:
参考Solar_API Solar_Sql_Model_Collection::appendNew()方法。
多对多数据添加
让我们回到经典的Solar示例Acme的actionAdd(), 刚开始学习Solar时你可能看它看的迷迷糊糊的,现在我们来弄懂它。
actionAdd()源码
解析
当中最难理解的是下面这一段:
因为Blogs和Tags的关系是多对多关系,所以要通过一个中间表来建立它们之间的关系,在Acme中是通过模型Taggings来建立的。在模型Blogs中是通过$this->_hasManyThrough('Tags', 'Taggings')
来建立三个模型之间的关系。
上面代码中将用户提交的tags变成一个$tags数组,然后通过模型Tags得到所有的$tag_all, 再通过 Solar_Sql_Model_Collection::appendNew() 方法将$tags添加进去, 该方法返回一条Solar_Sql_Model_Record记录的对象。
- Solar Model数据库操作之添加数据
- Solar Model数据库操作之读取数据
- Solar Model数据库操作之修改数据
- Solar Model数据库操作之删除数据
- jsp之javaBean操作数据库添加数据
- 对mySQL数据库进行数据操作之添加
- Solar Model的文件结构
- Solar的Model、Filter示例
- 数据库之数据操作
- JDBC数据库之添加数据
- Laravel Model数据操作
- Laravel Model数据操作
- JS(javascript)操作数据库->添加数据
- 数据库操作添加数据 出错 unrecognized token:
- JDBC中Statement操作数据库 添加数据
- Django之Model操作
- android 数据之数据库操作
- 数据库的基本操作之单列添加
- 转载
- Java版本的版本变迁
- SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT
- BlackBerry签名介绍
- sql server约束笔记
- Solar Model数据库操作之添加数据
- 您未必知道的Js技巧
- document、window对象
- google与百度地图api体验笔记
- Solar Model数据库操作之修改数据
- 登录效果其它变灰色
- asp.net form post 提交 asp.net js form 提交
- 创业及野心的一定要看
- JS双重Tab