yii2数据表模型类AR--查询数据
2017-07-11 22:17:05
•
阅读
打赏
AR 有两个方法来构建 DB 查询并向 AR 实例里填充数据:
yii\db\ActiveRecord::find()
yii\db\ActiveRecord::findBySql()
两个方法都会返回 yii\db\ActiveQuery 实例,该类继承自yii\db\Query, 都支持同一套灵活且强大的 DB 查询方法,如 where(),join(),orderBy()等。如:
// 取回所有活跃客户(状态为 *active* 的客户)并以他们的 ID 排序:
$user = User::find()
->where(['status' => User::STATUS_ACTIVE])
->orderBy('id')
->all();
// 返回ID为1的客户:
$user = User::find()
->where(['id' => 1])
->one();
// 取回活跃客户的数量:
$count = User::find()
->where(['status' => User::STATUS_ACTIVE])
->count();
// 以客户ID索引结果集:
$user = User::find()->indexBy('id')->all();
// $customers 数组以 ID 为索引
// 用原生 SQL 语句检索客户:
$sql = 'SELECT * FROM user';
$user = User::findBySql($sql)->all();
上面的代码中,User::STATUS_ACTIVE 是一个在 User类里定义的常量。使用一个更有意义的常量名称是一种更好的编程习惯。
两个快捷方法:findOne 和 findAll
用来返回一个或者一组ActiveRecord实例。前者返回第一个匹配到的实例,后者返回所有。 如:
// 返回 id 为 1 的客户
$user = User::findOne(1);
// 返回 id 为 1 且状态为 *active* 的客户
$user = User::findOne([
'id' => 1,
'status' => User::STATUS_ACTIVE,
]);
// 返回id为1、2、3的一组客户
$user = User::findAll([1, 2, 3]);
// 返回所有状态为 "deleted" 的客户
$customer = Customer::findAll([
'status' => Customer::STATUS_DELETED,
]);
以数组形式获取数据
处理大量的数据,用一个数组来存储取到的数据, 会节省内存。用 asArray() 函数处理:
// 以数组而不是对象形式取回客户信息:
$user = User::find()
->asArray()
->all();
// $user 的每个元素都是键值对数组
批量获取数据
在 Query Builder(查询生成器) 里,当需要从数据库中查询大量数据时,用 batch query(批量查询)来限制内存的占用。 在 AR 里也能使用相同的技巧,如
// 一次提取 10 个客户信息
foreach (User::find()->batch(10) as $user) {
// $user 是 10 个或更少的客户对象的数组
}
// 一次提取 10 个客户并一个一个地遍历处理
foreach (User::find()->each(10) as $user) {
// $user 是一个 ”User“ 对象
}
// 贪婪加载模式的批处理查询
foreach (User::find()->with('orders')->each() as $user) {
}
美景欣赏


相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型