Solar Model数据库操作之添加数据
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记录的对象。
本文详细介绍了SolarModel数据库操作中的添加数据方法,包括一对一、一对多及多对多数据的添加流程,通过示例展示了如何在操作中实现数据的正确关联与存储。
580

被折叠的 条评论
为什么被折叠?



