【问题标题】:Yii2 custom paginaion for Union query用于联合查询的 Yii2 自定义分页
【发布时间】:2017-09-11 01:03:11
【问题描述】:
我想在 Yii2 中实现自定义分页。这是我的代码
$connection = Yii::$app->getDb();
$name = $_GET['name'];
$query = '
SELECT name FROM user WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user2 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user3 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user4 WHERE name LIKE "%.'$name'.%""
';
$result = $connection->createCommand($query)->queryAll();
请告诉我如何在 Yii2 中实现分页
【问题讨论】:
标签:
pagination
yii2-advanced-app
【解决方案1】:
请试试这个
$totalCount = 0;
$name = $_GET['name'];
$connection = Yii::$app->getDb();
$limit = 10;
$from = (isset($_GET['page'])) ? ($_GET['page']-1)*$limit : 0; // Match according to your query string
$sql = '
SELECT name FROM user WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user2 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user3 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user4 WHERE name LIKE "%.'$name'.%""
';
$command = $connection->createCommand($sql.' LIMIT '.$from.','.$limit);
$count = $connection->createCommand('SELECT COUNT(*) as total FROM ('.$sql.') a')->queryAll();
$result = $command->queryAll();
$totalCount = $count[0]['total'];
$pages = new Pagination(['totalCount' => $totalCount, 'pageSize' => $limit]);
【解决方案2】:
这里有一个更合适的 Yii2 方式:
在控制器中:
$page = Yii::$app->request->get('page', 1);
$limit = Yii::$app->request->get('per-page', 10);
$from = ($page-1)*$limit;
//Get the db connection
$db = new yii\db\Connection(Yii::$app->db);
//prepare SQL query
$sql = '
SELECT name FROM user WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user2 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user3 WHERE name LIKE "%.'$name'.%""
UNION
SELECT name FROM user4 WHERE name LIKE "%.'$name'.%""
';
//Fire it!
$result = $db->createCommand($sql.' LIMIT '.$from.','.$limit)->queryAll();
$count = $db->createCommand('SELECT COUNT(*) as total FROM ('.$sql.') a')->->queryScalar();
$pagination = new \yii\data\Pagination(['totalCount' => $count, 'pageSize' => $limit]);
return $this->render('your-view', [
'result' => $result,
'pagination' => $pagination,
]);
然后在您的视图中的任何位置:
echo \yii\widgets\LinkPager::widget([
'pagination' => $pagination,
]);
我自己从E-Avni Tech 的回答中得到了帮助。如果我的回答有帮助,请给他点赞。