声明活动记录类
namespace app\models;
use yii\db\ActiveRecord;
class Customer extends ActiveRecord
{
public static function tableName()
{
return "customer"; // 没有设置表前缀时
return "{{%customer}}"; // 设置表前缀时
}
}
查询数据
查询单条
Model::find()->one();
Model::findOne($id);
Model::findOne($where);
查询多条
Model::find()->all();
Model::find()->findBySql($sql)->all();
Model::find()->findAll($ids);
Model::find()->findAll($where);
查询统计
Model::find()->count();
查询集合
Model::find()->indexBy('id')->all();
查询可加入条件
$model->where($where)->orderBy($order)->asArray()->batch()->each()->with();
where 查询条件
orderBy 排序
asArray 返回数组格式的数据
batch 限制查询条数
with 关联查询
关联查询
class Customer extends \yii\db\ActiveRecord
{
public function getOrders()
{
// Customer has_many Order via Order.customer_id -> id
return $this->hasMany(Order::className(), ['customer_id' => 'id']);
}
}
class Order extends \yii\db\ActiveRecord
{
// Order has_one Customer via Customer.id -> customer_id
public function getCustomer()
{
return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
}
}
完成上述声明后,就可以通过定义相应的getter方法来像访问对象属性一样获取关联数据:
// get the orders of a customer
$customer = Customer::findOne(1);
$orders = $customer->orders; // $orders is an array of Order objects
提示:如果你再次访问 $customer->orders ,并不会重复执行上述第2行SQL查询。这条查询语句只在表达式第一次被访问时才被执行。后续的访问将直接返回内部缓冲数据。如果你想重新执行查询,只需要先调用一下unset来清除缓存: unset($customer->orders);
事务
$transaction = Yii::$app->db->beginTransaction(); // 启用事务
try {
Article::find()->all();
Admin::findOne(1);
// ... executing other SQL statements ...
$transaction->commit(); // 提交事务
} catch (Exception $e) {
$transaction->rollBack(); // 事务回滚
}