YII2 搜尋帶分頁,分頁的兩種方式

2022-09-08 01:57:13 字數 4490 閱讀 1996

1.文章表關聯

<?php

//...other code

//關聯

public function getcate()

?>

2.搜尋模型

common/models/search/建立articlesearch.php

<?php

namespace common\models\search;

use yii;

use yii\base\model;

use yii\data\activedataprovider;

use common\models\article;

class articlesearch extends article

/*** @inheritdoc

*/public function scenarios()

//搜尋

public function search($params)

]);$dataprovider = new activedataprovider([

'query' => $query,

'pagination' => [

'pagesize' => 2,

],]);

// 從引數的資料中載入過濾條件,並驗證

$this->load($params);

if (!$this->validate())

// 增加過濾條件來調整查詢物件

$query->andfilterwhere([

// 'cname' => $this->cate.cname,

'title' => $this->title,

]);$query->andfilterwhere(['like', 'title', $this->title]);

//$query->andfilterwhere(['like', 'cate.cname', $this->cname]) ;

return $dataprovider;

}}

二、分頁使用

方式一首先在控制器的動作中,建立分頁物件並且為其填充資料:

<?php

//other code

use yii\data\pagination;

public function actionarticlelist()

?>

<?php

use yii\widgets\linkpager;

use yii\helpers\html;

use yii\helpers\url;

//other code

foreach ($models as $model)

// 顯示分頁

echo linkpager::widget([

'pagination' => $pagination,

'firstpagelabel'=>"first",

'prevpagelabel'=>'prev',

'nextpagelabel'=>'next',

'lastpagelabel'=>'last',

]);?>

方式二

控制器:

<?php

$query = article::find()->with('cate');

$provider = new activedataprovider([

'query' => $query,

'pagination' => [

'pagesize' => 3,

],'sort' => [

'defaultorder' => [

//'created_at' => sort_desc,

//'title' => sort_asc,]],

]);return $this->render('index', [

'model' => $query,

'dataprovider' => $provider

]);?>

檢視:

<?php

use yii\grid\gridview;

echo gridview::widget([

'dataprovider' => $dataprovider,

//每列都有搜尋框 控制器傳過來$searchmodel = new articlesearch();

//'filtermodel' => $searchmodel,

'layout'=> '

', 'pager'=>[

//'options'=>['class'=>'hidden']//關閉自帶分頁

'firstpagelabel'=>"first",

'prevpagelabel'=>'prev',

'nextpagelabel'=>'next',

'lastpagelabel'=>'last',

],'columns' => [

//['class' => 'yii\grid\serialcolumn'],//序列號從1開始

// 資料提供者中所含資料所定義的簡單的列

// 使用的是模型的列的資料

'id',

'username',

['label'=>'文章類別', /*'attribute' => 'cid',產生乙個a標籤,點選可排序*/ 'value' => 'cate.cname' ],

['label'=>'發布日期','format' => ['date', 'php:y-m-d'],'value' => 'created_at'],

// 更複雜的列資料

['label'=>'封面圖','format'=>'raw','value'=>function($m)],

['class' => 'yii\grid\datacolumn', //由於是預設型別,可以省略

'value' => function ($data) ,],[

'class' => 'yii\grid\actioncolumn',

'header' => '操作',

'template' => ' ',//只需要展示刪除和更新

/*'headeroptions' => ['width' => '80'],*/

'buttons' => [

'delete' => function($url, $model, $key),

'update' => function($url, $model, $key),

],],

],]);?>

三、搜尋帶分頁功能

建立搜尋模型(前面己做)

控制傳入資料

檢視顯示

控制器**:

<?php

public function actionindex()

?>

檢視:

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

'action' => ['index'],

'method' => 'get',

'id' => 'cateadd-form',

'options' => ['class' => 'form-horizontal'],

]); ?>

<?= $form->field($searchmodel, 'title',[

'options'=>['class'=>''],

'inputoptions' => ['placeholder' => '文章搜尋','class' => 'input-sm form-control'],

])->label(false) ?>

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

span>

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

<?= gridview::widget([

'dataprovider' => $dataprovider,

'layout'=> '

', 'pager'=>[

//'options'=>['class'=>'hidden']//關閉自帶分頁

'firstpagelabel'=>"first",

'prevpagelabel'=>'prev',

'nextpagelabel'=>'next',

'lastpagelabel'=>'last',

],//這部分和上面的分頁是一樣的

yii2的分頁和ajax分頁

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

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

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

分頁的兩種技巧

分頁的兩種技巧 分頁的技巧有兩種,一種是直接透過t sql,另一種是透過store procedure,在這post出來跟大家分享一下 t sql 假設northwind有乙個customer的table,你需要取回41 50筆的記錄,t sql語法該如何作呢?select top 10 custo...