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

来源:互联网 发布:hive sql与sql 编辑:程序博客网 时间:2024/04/29 15:18

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

  • Solar Model数据库操作之添加数据
    • 1对1添加数据
      • actionAdd()源码
      • 解析
    • 1对多添加数据
      • actionAddScores()源码
      • 解析
    • 多对多数据添加
      • actionAdd()源码
      • 解析

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

原创粉丝点击