Solar Model数据库操作之添加数据

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->itemAdmin_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 , scoreteam 表学期,比如‘2010上'; 'score'表分数)。
  • 为scores表建立模型Scores。
  • 在模型Users中添加与模型Scores的关系:$this->_hasMany('scores')

*scores*表SQL源码如下:

actionAddScores()源码

这里我们要讨论的是在添加用户的时候要添加该用户的成绩。

解析

因为这里主要是说怎么对1对多的数据同时添加,也就是同时添加了usersscores 两张表,所以我们主要讨论以下这几行代码:

在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记录的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值