yii2笔记

http://www.yiichina.com/doc/guide/2.0/db-active-record

1. ActiveRecord查询方法:

多条记录,如何为单独记录的话,需要将all()修改为 one() 即加。

$products = Fruit::find()
    ->select(['id', 'title', 'thumb', 'url'])  //筛选字段
    ->where(['status' => Fruit::STATUS_ACTIVE])  //过滤条件
    ->orderBy('listorder')  //排序
    ->asArray()   //以数组形式返回
    ->all();

2. 使用AR更新记录时,判断findOne()是否找到相应的记录,否则会报错!

// 更新主键为$id的AR
$model = Customer::findOne($id);
if ($model === null) {
    throw new NotFoundHttpException;
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
    // 获取用户输入的数据,验证并保存
}

3.打印上次执行的sql语句

$sql =  $record ->createCommand()->getRawSql();

4.

以下为yy1的部分常用语句:

—————-创建Yii应用———————-
cd到网站目录
yiic webapp WebRoot/mysql
注意:尽量使用gii生成demo代码 或者 人工创建代码

———————-Yii Active Record 模式 适用于大多简单场景—————————
$attributes 代表是要修改的字段的集合
$condition 代表条件
$params 传入的值

// 查找满足指定条件的结果中的第一行
$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);

// 查找满足指定条件的所有行
$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);

// 获取满足指定条件的行数
$n=Post::model()->count($condition,$params);
// 通过指定的 SQL 获取结果行数
$n=Post::model()->countBySql($sql,$params);
// 检查是否至少有一行复合指定的条件
$exists=Post::model()->exists($condition,$params);

// 更新符合指定条件的行
Post::model()->updateAll($attributes,$condition,$params);
// 更新符合指定条件和主键的行
Post::model()->updateByPk($pk,$attributes,$condition,$params);
// 更新满足指定条件的行的计数列
Post::model()->updateCounters($counters,$condition,$params);

$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete(); // 从数据表中删除此行

// 删除符合指定条件的行
Post::model()->deleteAll($condition,$params);
// 删除符合指定条件和主键的行
Post::model()->deleteByPk($pk,$condition,$params);

———————Yii Query Builder 模式 ————————–
$command = Yii::app()->db->createCommand();
// SELECT *
$command->select();
// SELECT `id`, `username`
select(‘id, username’)
// SELECT `tbl_user`.`id`, `username` AS `name`
select(‘tbl_user.id, username as name’)
// SELECT `id`, `username`
select(array(‘id’, ‘username’))
// SELECT `id`, count(*) as num
select(array(‘id’, ‘count(*) as num’))

// FROM `tbl_user`
from(‘tbl_user’)
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from(‘tbl_user u, public.tbl_profile p’)
// FROM `tbl_user`, `tbl_profile`
from(array(‘tbl_user’, ‘tbl_profile’))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array(‘tbl_user’, ‘(select * from tbl_profile) p’))

// WHERE id=1 or id=2
where(‘id=1 or id=2’)
// WHERE id=:id1 or id=:id2
where(‘id=:id1 or id=:id2’, array(‘:id1’=>1, ‘:id2’=>2))
// WHERE id=1 OR id=2
where(array(‘or’, ‘id=1’, ‘id=2’))
// WHERE id=1 AND (type=2 OR type=3)
where(array(‘and’, ‘id=1’, array(‘or’, ‘type=2’, ‘type=3’)))
// WHERE `id` IN (1, 2)
where(array(‘in’, ‘id’, array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array(‘not in’, ‘id’, array(1,2)))
// WHERE `name` LIKE ‘%Qiang%’
where(array(‘like’, ‘name’, ‘%Qiang%’))
// WHERE `name` LIKE ‘%Qiang’ AND `name` LIKE ‘%Xue’
where(array(‘like’, ‘name’, array(‘%Qiang’, ‘%Xue’)))
// WHERE `name` LIKE ‘%Qiang’ OR `name` LIKE ‘%Xue’
where(array(‘or like’, ‘name’, array(‘%Qiang’, ‘%Xue’)))
// WHERE `name` NOT LIKE ‘%Qiang%’
where(array(‘not like’, ‘name’, ‘%Qiang%’))
// WHERE `name` NOT LIKE ‘%Qiang%’ OR `name` NOT LIKE ‘%Xue%’
where(array(‘or not like’, ‘name’, array(‘%Qiang%’, ‘%Xue%’)))

// ORDER BY `name`, `id` DESC
order(‘name, id desc’)
// ORDER BY `tbl_profile`.`name`, `id` DESC
order(array(‘tbl_profile.name’, ‘id desc’))

// GROUP BY `name`, `id`
group(‘name, id’)
// GROUP BY `tbl_profile`.`name`, `id`
group(array(‘tbl_profile.name’, ‘id’))

// LIMIT 10
limit(10)
// LIMIT 10 OFFSET 20
limit(10, 20)
// OFFSET 20
offset(20)

// JOIN `tbl_profile` ON user_id=id
join(‘tbl_profile’, ‘user_id=id’)
// LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND type=1
leftJoin(‘pub.tbl_profile p’, ‘p.user_id=id AND type=:type’, array(‘:type’=>1))

// HAVING id=1 or id=2
having(‘id=1 or id=2’)
// HAVING id=1 OR id=2
having(array(‘or’, ‘id=1’, ‘id=2’))

//union
union(‘select * from tbl_profile’)

// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)
$command->insert(‘tbl_user’, array(
‘name’=>’Tester’,
’email’=>’tester@example.com’,
));

// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update(‘tbl_user’, array(
‘name’=>’Tester’,
), ‘id=:id’, array(‘:id’=>1));

// DELETE FROM `tbl_user` WHERE id=:id
$command->delete(‘tbl_user’, ‘id=:id’, array(‘:id’=>1));

// CREATE TABLE `tbl_user` (
// `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
// `username` varchar(255) NOT NULL,
// `location` point
// ) ENGINE=InnoDB
createTable(‘tbl_user’, array(
‘id’ => ‘pk’,
‘username’ => ‘string NOT NULL’,
‘location’ => ‘point’,
), ‘ENGINE=InnoDB’)

// RENAME TABLE `tbl_users` TO `tbl_user`
renameTable(‘tbl_users’, ‘tbl_user’)

// DROP TABLE `tbl_user`
dropTable(‘tbl_user’)

// TRUNCATE TABLE `tbl_user`
truncateTable(‘tbl_user’)

// ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL
addColumn(‘tbl_user’, ’email’, ‘string NOT NULL’)

// ALTER TABLE `tbl_user` DROP COLUMN `location`
dropColumn(‘tbl_user’, ‘location’)

// ALTER TABLE `tbl_users` CHANGE `name` `username` varchar(255) NOT NULL
renameColumn(‘tbl_user’, ‘name’, ‘username’)

// ALTER TABLE `tbl_user` CHANGE `username` `username` varchar(255) NOT NULL
alterColumn(‘tbl_user’, ‘username’, ‘string NOT NULL’)

// ALTER TABLE `tbl_profile` ADD CONSTRAINT `fk_profile_user_id`
// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
// ON DELETE CASCADE ON UPDATE CASCADE
addForeignKey(‘fk_profile_user_id’, ‘tbl_profile’, ‘user_id’,
‘tbl_user’, ‘id’, ‘CASCADE’, ‘CASCADE’)

// ALTER TABLE `tbl_profile` DROP FOREIGN KEY `fk_profile_user_id`
dropForeignKey(‘fk_profile_user_id’, ‘tbl_profile’)

// CREATE INDEX `idx_username` ON `tbl_user` (`username`)
createIndex(‘idx_username’, ‘tbl_user’, ‘username’)

// DROP INDEX `idx_username` ON `tbl_user`
dropIndex(‘idx_username’, ‘tbl_user’)

—————–Yii DAO 试用于复杂场景——————————-
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);

$rowCount=$command->execute(); // 执行无查询 SQL
$dataReader=$command->query(); // 执行一个 SQL 查询
$rows=$command->queryAll(); // 查询并返回结果中的所有行
$row=$command->queryRow(); // 查询并返回结果中的第一行
$column=$command->queryColumn(); // 查询并返回结果中的第一列
$value=$command->queryScalar(); // 查询并返回结果中第一行的第一个字段

//结果集使用
$dataReader=$command->query();
// 重复调用 read() 直到它返回 false
while(($row=$dataReader->read())!==false) { … }
// 使用 foreach 遍历数据中的每一行
foreach($dataReader as $row) { … }
// 一次性提取所有行到一个数组
$rows=$dataReader->readAll();

//事务使用
$transaction=$connection->beginTransaction();
try
{
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//…. other SQL executions
$transaction->commit();
}
catch(Exception $e) // 如果有一条查询失败,则会抛出异常
{
$transaction->rollBack();
}

//表前缀
$sql=’SELECT * FROM {{user}}’;
$users=$connection->createCommand($sql)->queryAll();