$query = User::find()->where(['LIKE', 'name', 'php%', false]);
$commandQuery = clone $query;
// SELECT * FROM `user` WHERE `name` LIKE 'php%'
echo $commandQuery->createCommand()->getRawSql();
return \yii\helpers\ArrayHelper::getColumn(User::find()->all(), 'name');
return User::find()->select('name')->asArray()->column();
Expression()
函数* 使用`find_in_set()`等函数,需要用到`Expression()` 表达式。
User::find()
->where(new yii\db\Expression('FIND_IN_SET(:status, status)'))
->addParams([':status' => 1])
->all();
* 避免select里的子查询被识别成字段
$quert = User::find()
->select([
new Expression('count(*) as count , count(distinct mobile) as mnumber')
])->asArray()
->all();
$transaction = $connection->beginTransaction();
try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
// ... 执行其他 SQL 语句 ...
$transaction->commit();
} catch(Exception $e) {
$transaction->rollBack();
throw $e;
}
即建立了联合唯一索引的字段,验证时保证数据的完整。
[
['store_id', 'member_name'],
'unique',
'targetAttribute' => ['store_id', 'member_name'],
'message' => 'The combination of Store ID and Member Name has already been taken.'
]
校验 country_id
在 Country
中是否存在,一般用于一些外键关联的数据表之间的数据约束。
[
['country_id'],
'exist',
'skipOnError' => true,
'targetClass' => Country::className(),
'targetAttribute' => ['country_id' => 'id'],
'message' => '此{attribute}不存在。'
]
[
['card_id', 'card_code'],
//至少要一个
function ($attribute, $param) {
if (empty($this->card_code) && empty($this->card_id)) {
$this->addError($attribute, 'card_id/card_code至少要填一个');
}
},
'skipOnEmpty' => false
]
// SELECT * FROM `user` WHERE `name` LIKE 'php%'
$query = User::find()->where(['LIKE', 'name', 'php%', false]);
调用yii\db\Connection
的cache方法,写入回调函数执行SQL查询并缓存结果。
$id = Yii::$app->request->get('id');
$collection = Yii::$app->db->cache(function (Connection $db) use($id){
return self::findOne(['id'=>$id]);
}, 10); // 缓存10秒
var_dump($collection);
$subQuery = new Query();
$subQuery->from(PostComment::tableName())->where(['status' => PostComment::STATUS_ACTIVE])
->orderBy(['created_at' => SORT_DESC]);
生成如下语句:
SELECT * FROM (SELECT * FROM
post_commentWHERE
status=1 ORDER BY
created_atDESC)
tmpAGROUP BY
post_id``
$this->module->id
$this->id
$this->action->id
echo array_values($model->getFirstErrors())[0];
exit;
public function actionDownload()
{
// downUrl
return \Yii::$app->response->setDownloadHeaders($model->downUrl);
}
模型的
downurl
属性可以通过extraFields()
进行设置。
\yii\helpers\VarDumper::dump($var);
// 第二个参数是数组的深度 第三个参数是是否显示代码高亮(默认不显示)
\yii\helpers\VarDumper::dump($var, 10 , true);
// 方法一
Yii::$app->runAction('new_controller/new_action', $params);
// 方法二
return (new SecondController('second', Yii::$app->module))->runAction('index', $data);
Yii::$app->getRequest->get('id');
// 效率更高
Yii::$app->getRequest()->get('id');
Yii::$app->controller->module->id;
Yii::$app->controller->id
Yii::$app->controller->action->id
// 可以原样显示<script></script>代码,但不解析
echo yii\helpers\Html::encode($view_hello_str)
// 可以过滤掉<script></script>代码
echo yii\helpers\HtmlPurifier::process($view_hello_str)
修改登陆状态超时时间(到期后自动退出登陆) config/web.php
中的components组件数组中。
'user' => [
'class' => 'yii\web\User',
'identityClass' => 'common\models\User',
'loginUrl' => ['/user/sign-in/login'],
'authTimeout' => 1800, // 登陆有效时间
'as afterLogin' => 'common\behaviors\LoginTimestampBehavior'
],
通过下面的IP地址方式配置debug的显示,便于调试代码。
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
'allowedIPs' => ['127.0.0.1', '192.168.0.*', '192.168.33.1'],
];
(完)