yii数据库常用操作
2017-05-15 15:33
363 查看
一 、Active Record
1.创建记录
要向数据表中插入新行,我们要创建一个相应
AR 类的实例,设置其与表的列相关的属性,然后调用 save() 方法完成插入:
2.读取记录
要读取数据表中的数据,我们可以通过如下方式调用
如果
然后我们就可以像读取普通对象的属性那样读取载入的值,例如
如果使用给定的查询条件在数据库中没有找到任何东西,
调用
SQL 语句中的
注意: 在上面的例子中,我们可能需要在特定的 DBMS 中将
例如,如果我们使用 PostgreSQL,我们必须将此表达式写为
我们也可以使用
例如:
注意,当使用 CDbCriteria 作为查询条件时,
一种替代 CDbCriteria 的方法是给
数组的键和值各自对应标准(criterion)的属性名和值,上面的例子可以重写为如下:
信息: 当一个查询条件是关于按指定的值匹配几个列时,我们可以使用 findByAttributes()。我们使
但它常常引起混淆,冲突和比如列名大小写敏感的问题。
当有多行数据匹配指定的查询条件时,我们可以通过下面的
如果没有任何东西符合查询条件,
null。
除了上面讲述的
3. 更新记录
在 AR 实例填充了列的值之后,我们可以改变它们并把它们存回数据表。(同样通过find系列方法获取要更改的记录,然后赋值,save即可)
直接更新数据表中的一行或多行而不首先载入也是可行的。
AR 提供了如下方便的类级别方法实现此目的:
直接更新数据表中的一行或多行而不首先载入也是可行的。 AR 提供了如下方便的类级别方法实现此目的:
4. 删除记录
如果一个
AR 实例被一行数据填充,我们也可以删除此行数据。
使用下面的类级别代码,可以无需首先加载行就可以删除它。
详细可参考http://www.yiichina.com/doc/guide/1.1/database.ar
1.创建记录
要向数据表中插入新行,我们要创建一个相应
AR 类的实例,设置其与表的列相关的属性,然后调用 save() 方法完成插入:
$post=new Post; $post->title='sample post'; $post->content='content for the sample post'; $post->create_time=time(); $post->save();
2.读取记录
要读取数据表中的数据,我们可以通过如下方式调用
find系列方法中的一种:
// 查找满足指定条件的结果中的第一行 $post=Post::model()->find($condition,$params); // 查找具有指定主键值的那一行 $post=Post::model()->findByPk($postID,$condition,$params); // 查找具有指定属性值的行 $post=Post::model()->findByAttributes($attributes,$condition,$params); // 通过指定的 SQL 语句查找结果中的第一行 $post=Post::model()->findBySql($sql,$params);
如上所示,我们通过 [code]Post::model()调用
find方法。 请记住,静态方法
model()是每个 AR 类所必须的。 此方法返回在对象上下文中的一个用于访问类级别方法(类似于静态类方法的东西)的 AR 实例。[/code]
如果
find方法找到了一个满足查询条件的行,它将返回一个
Post实例,实例的属性含有数据表行中相应列的值。
然后我们就可以像读取普通对象的属性那样读取载入的值,例如
echo $post->title;。
如果使用给定的查询条件在数据库中没有找到任何东西,
find方法将返回 null 。
调用
find时,我们使用
$condition和
$params指定查询条件。此处
$condition可以是
SQL 语句中的
WHERE字符串,
$params则是一个参数数组,其中的值应绑定到
$condation中的占位符。例如:
// 查找 postID=10 的那一行 $post=Post::model()->find('postID=:postID', array(':postID'=>10));
注意: 在上面的例子中,我们可能需要在特定的 DBMS 中将
postID列的引用进行转义。
例如,如果我们使用 PostgreSQL,我们必须将此表达式写为
"postID"=:postID,因为 PostgreSQL 在默认情况下对列名大小写不敏感。
我们也可以使用
$condition指定更复杂的查询条件。 不使用字符串,我们可以让
$condition成为一个 CDbCriteria 的实例,它允许我们指定不限于
WHERE的条件。
例如:
$criteria=new CDbCriteria; $criteria->select='title'; // 只选择 'title' 列 $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria); // $params 不需要了
注意,当使用 CDbCriteria 作为查询条件时,
$params参数不再需要了,因为它可以在 CDbCriteria 中指定,就像上面那样。
一种替代 CDbCriteria 的方法是给
find方法传递一个数组。
数组的键和值各自对应标准(criterion)的属性名和值,上面的例子可以重写为如下:
$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), ));
信息: 当一个查询条件是关于按指定的值匹配几个列时,我们可以使用 findByAttributes()。我们使
$attributes参数是一个以列名做索引的值的数组。在一些框架中,此任务可以通过调用类似
findByNameAndTitle的方法实现。虽然此方法看起来很诱人,
但它常常引起混淆,冲突和比如列名大小写敏感的问题。
当有多行数据匹配指定的查询条件时,我们可以通过下面的
findAll方法将他们全部带回。 每个都有其各自的
find方法,就像我们已经讲过的那样。
// 查找满足指定条件的所有行 $posts=Post::model()->findAll($condition,$params); // 查找带有指定主键的所有行 $posts=Post::model()->findAllByPk($postIDs,$condition,$params); // 查找带有指定属性值的所有行 $posts=Post::model()->findAllByAttributes($attributes,$condition,$params); // 通过指定的SQL语句查找所有行 $posts=Post::model()->findAllBySql($sql,$params);
如果没有任何东西符合查询条件,
findAll将返回一个空数组。这跟
find不同,
find会在没有找到什么东西时返回
null。
除了上面讲述的
find和
findAll方法,为了方便,(Yii)还提供了如下方法:
// 获取满足指定条件的行数 $n=Post::model()->count($condition,$params); // 通过指定的 SQL 获取结果行数 $n=Post::model()->countBySql($sql,$params); // 检查是否至少有一行复合指定的条件 $exists=Post::model()->exists($condition,$params);
3. 更新记录
在 AR 实例填充了列的值之后,我们可以改变它们并把它们存回数据表。(同样通过find系列方法获取要更改的记录,然后赋值,save即可)
$post=Post::model()->findByPk(10); $post->title='new post title'; $post->save(); // 将更改保存到数据库
直接更新数据表中的一行或多行而不首先载入也是可行的。
AR 提供了如下方便的类级别方法实现此目的:
直接更新数据表中的一行或多行而不首先载入也是可行的。 AR 提供了如下方便的类级别方法实现此目的:
// 更新符合指定条件的行 Post::model()->updateAll($attributes,$condition,$params); // 更新符合指定条件和主键的行 Post::model()->updateByPk($pk,$attributes,$condition,$params); // 更新满足指定条件的行的计数列 Post::model()->updateCounters($counters,$condition,$params);
4. 删除记录
如果一个
AR 实例被一行数据填充,我们也可以删除此行数据。
$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10 $post->delete(); // 从数据表中删除此行
使用下面的类级别代码,可以无需首先加载行就可以删除它。
// 删除符合指定条件的行 Post::model()->deleteAll($condition,$params); // 删除符合指定条件和主键的行 Post::model()->deleteByPk($pk,$condition,$params);
详细可参考http://www.yiichina.com/doc/guide/1.1/database.ar
相关文章推荐
- YII 框架常用语法 常用数据库操作语法
- 新 好用的 YII数据库操作常用语句
- 对数据库操作的常用函数大全
- ASP常用数据库连接及操作的方法和技巧
- 通过配置DS操作数据库的常用代码
- ASP编程中连接数据库和数据库操作的常用代码
- ASP编程中连接数据库和数据库操作的常用代码
- ORACLE数据库常用操作
- mysql常用操作-----数据库的备份和恢复
- Enterprise Library2.0数据库常用操作
- PHP 下与几个常用数据库的操作函数
- 操作 SQL Server Mobile 2005 数据库的常用 C# 代码
- ASP常用数据库连接及操作的方法和技巧
- 常用的数据库和数据库操作
- (转)数据库操作常用函数大全(Sql Server 2000 oracle9i)
- 转 操作 SQL Server Mobile 2005 数据库的常用 C# 代码
- 数据库操作常用函数大全(Sql Server 2000 oracle9i)
- 我常用的数据库操作bin
- 常用数据库建表操作SQL代码
- mobile 5 中操作SDF数据库的常用方法