YII2原生SQL分頁支援排序搜尋

2021-07-02 13:23:50 字數 2380 閱讀 2564

yii2預設情況下會生成乙個直接操作單錶的模型並且具備搜尋和分頁以及排序功能,在很多複雜的業務邏輯需求中,單錶操作很難實現我們想要的效果,此時我要是選擇的話就用純sql來做,不用考慮那麼多的對應關係,而且你得sql語句執行效率越高,程式執行的效率也就越高。

ok我們來看看怎麼實現。

二、建表

yii_article(文章):[id,title,publish_time,user_id,cate_id,content,sort]

yii_cate(分類):[id,cate_name,pid,sort]

yii_user(使用者):[id,uname,realname,uemail,password_hash,password_reset_token,auth_key]

三、sql語句

select `yii_user`.`realname`,`yii_article`.*,`yii_cate`.`cate_name`,(select count(`yii_comment`.`id`) from `yii_comment` where `yii_comment`.`article_id`=`yii_article`.`id`) as `comment_num` from `yii_article` left join `yii_user` on `yii_user`.`id`=`yii_article`.`user_id` left join `yii_cate` on `yii_cate`.`id`=`yii_article`.`cate_id`

四、實現

模型articlesearch.php

public function search($params)

//這些搜尋條件你都可以乙個個加上,為了節約時間我就只寫id乙個了

$rows=article::findbysql($sql)->all();

$dataprovider = new sqldataprovider([

'sql' => $sql,

//'params' => [':status' => 1],

'totalcount' => count($rows),

'sort' => [

'attributes' => [

'id'=>[

'asc' => ['yii_article.id' => sort_asc],//yii_article.id如果你不是多表你可以直接寫id

'desc' => ['yii_article.id' => sort_desc],

'default' => sort_asc,

'label' => 'id-num',

],],

],'pagination' => [

'pagesize' => 5,

],]);

$this->load($params);

if (!$this->validate())

return $dataprovider;

}

控制器檔案  articlecontroller.php

public function actionindex()

視**件  view/article/index.php

<?php

foreach ($models as $res)

?>

//排序

<?php

echo $sort->link('id') . ' | ';

//分頁

echo linkpager::widget([

'pagination' => $page,

]);?>

//搜尋表單

<?php $form = activeform::begin([

'action' => ['index'],

'method' => 'get',

]); ?>

<?= $form->field($searchmodel, 'id') ?>

<?= $form->field($searchmodel, 'user_id') ?>

<?= $form->field($searchmodel, 'cate_id') ?>

<?= $form->field($searchmodel, 'publish_time') ?>

<?= html::submitbutton('search', ['class' => 'btn btn-primary']) ?>

<?= html::resetbutton('reset', ['class' => 'btn btn-default']) ?>

<?php activeform::end(); ?>

yii2新增redis支援

yii2官方有外掛程式支援redis擴充套件,可是按照官方操作手冊無法安裝 提示和openssl相關的錯誤 1,php composer.phar require prefer dist yiisoft yii2 redis 失敗 2,在composer.json新增依賴配置如下,執行compose...

yii2 執行原生態的sql語句

搜尋 connection yii db user id yii user id print r user id 報名的賽事 sql select ybm from bm userybm where user id user id command connection createcommand s...

yii2的分頁和ajax分頁

要想使用yii分頁類 第一步 在控制器層載入分頁類 use yii data pagination 第二步 使用model層查詢資料,並用分分頁,限制每頁的顯示條數 data user find user為model層,在控制器剛開始use了field這個model,這兒可以直接寫field,開頭大...