class Model1 .....
{
...
private _prevId = null;
private _nextId = null;
...
public function afterFind() //this function will be called after your every find call
{
//find/calculate/set $this->_prevId;
//find/calculate/set $this->_nextId;
}
public function getPrevId() {
return $this->prevId;
}
public function getNextId() {
return $this->nextId;
}
}
public static function getNextPrevId($currentId)
{
$queryprev = new Query();
$queryprev->select('max(id)')->from(self::tableName())->where('id<:id',['id'=>$currentId]);
$querynext = new Query();
$querynext->select('min(id)')->from(self::tableName())->where('id>:id',['id'=>$currentId]);
return [ $queryprev->scalar(), $querynext->scalar()];
}
控制器:
public function actionView($id) {
return $this->render('view', [
'model' => $this->findModel($id),
'nextprev' => YourModel::getNextPrevId($id),
]);
}
7条答案
按热度按时间mepcadol1#
我在Yii2的模型中添加了以下功能:
lnxxn5zx2#
我做了一个函数来获取你要找的id。我建议你在模型中声明它:
要使用它,您只需执行以下操作:
它将返回下一条或上一条记录的相应id。
我没有测试它,所以给予它一个尝试,如果出了问题,请让我知道。
68bkxrlz3#
创建一个用于向其他函数传递信息的私有变量。
在模型中:
检查ViewDetal链接中生成的代码,并使用以下命令修改_view文件中的Prev/Net链接
在数组('id'=〉#)部分中。
olqngx594#
取原始答案,并将其修改为Yii2,进行一些清理:
kmynzznz5#
我的实现基于SearchModel。
控制器:
订单搜索:
PS:确定你是否可以使用
array_column
作为对象数组。这在PHP 7+中很好用,但是在较低版本中你必须自己提取id
。也许在PHP 5.4+中使用array_walk
或array_filter
是个好主意xdnvmnnf6#
通过使用数据库引擎/优化(当id作为主键时)实现了性能改进:
产品型号:
控制器:
查看方式:
wydwbb8l7#
前面的解决方案在获取第一条或最后一条记录时会出现问题,而且它们会多次调用数据库。下面是我的工作解决方案,它只处理一个查询,处理表尾,并禁用表尾的按钮:
在模型中:
在控制器内:
在视图中: