Php Laravel很有说服力,我如何开始从结果集中列出数据?
我有一个表(型号名称:数据): 以及一个用于检索数据的查询:Php Laravel很有说服力,我如何开始从结果集中列出数据?,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个表(型号名称:数据): 以及一个用于检索数据的查询: $datum = Data::orderBy("data1")->paginate(10); 现在,查询总是从顶部的“A”开始,并通过所有3个页面到达“Z”,当用户最初点击屏幕时,这很好。如果用户编辑id=15 data1=“o”,如何在id 15或第2页重新启动列表,而不是返回列表顶部?根据您可以使用URL中的页面查询字符串指向特定页面。根据您可以使用URL中的页面查询字符串指向特定页面。您可以使用第四个参数 $datum
$datum = Data::orderBy("data1")->paginate(10);
现在,查询总是从顶部的“A”开始,并通过所有3个页面到达“Z”,当用户最初点击屏幕时,这很好。如果用户编辑id=15 data1=“o”,如何在id 15或第2页重新启动列表,而不是返回列表顶部?根据您可以使用URL中的
页面
查询字符串指向特定页面。根据您可以使用URL中的页面
查询字符串指向特定页面。您可以使用第四个参数
$datum = Data::orderBy("data1")->paginate(10, ['*'], 'page', 2);
2-页码您可以使用第四个参数
$datum = Data::orderBy("data1")->paginate(10, ['*'], 'page', 2);
2-页码我建议使用:
快速回答:
$count = 26;
$skip = 15;
$limit = $count - $skip;
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
说明:
$count = 26;
$skip = 15;
$limit = $count - $skip;
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
1)首先,计算行数:
$count = Data::count();
// OR
$count = 26; // In your case (alphabet letters) you can set $count directly to 26
2)然后设置要跳过的行数(或从查询参数中获取,以便用户可以编辑表单)
3)计算剩余行数(所有要提取的行)
4)最后,收集数据,跳过前15个
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
// be aware that you can not paginate when using skip/take
我建议使用:
快速回答:
$count = 26;
$skip = 15;
$limit = $count - $skip;
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
说明:
$count = 26;
$skip = 15;
$limit = $count - $skip;
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
1)首先,计算行数:
$count = Data::count();
// OR
$count = 26; // In your case (alphabet letters) you can set $count directly to 26
2)然后设置要跳过的行数(或从查询参数中获取,以便用户可以编辑表单)
3)计算剩余行数(所有要提取的行)
4)最后,收集数据,跳过前15个
$datum = Data::orderBy("data1")->skip($skip)->take($limit)->get();
// be aware that you can not paginate when using skip/take
感谢Dry7、Giorgio.dev和PhilMarc。你们都给了我一个答案。最终的解决方案将要复杂得多。这是由于由于表(四列中的任意一列)的排序顺序和筛选出的记录数(三列中的任意一列)对页面计算进行了更改。如果新记录或编辑的记录不在筛选范围内,除清除筛选外。表的最新副本和我的代码(让我保留Laravel提供的分页)如下所示
mysql> show columns from mailing_classes;
+--------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| mailing_class_code | char(2) | NO | UNI | NULL | |
| description | varchar(255) | NO | | NULL | |
| created_by_id | bigint(20) unsigned | NO | MUL | NULL | |
| last_editted_by_id | bigint(20) unsigned | NO | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+----------------+
public function index()
{
$mailingClassSortOrder = session('mailingClassSortOrder');
$mailingClassRestartValue = session('mailingClassRestartValue');
$mailingClassSearchLeft = session('mailingClassSearchLeft');
$mailingClassSearchRight = session('mailingClassSearchRight');
$rows = 1;
$page = 0;
$restart = 0;
$mcCode = '';
$mcDescription = '';
$mcUpdatedAt = '';
if ($mailingClassRestartValue > 0) {
$restartRows = MailingClass::where('id', '=', $mailingClassRestartValue)->get();
foreach ($restartRows as $restartRow) {
$mcCode = $restartRow->mailing_class_code;
$mcDescription = $restartRow->description;
}
// if restart value does not appear in the filter then clear the filter
// {deleted for sake of space}
// find row position based on sort order
if ($mailingClassSortOrder === "mailing_class_code") {
// sorted by mailing_class_code column
$rows = MailingClass::where('mailing_class_code', '<=', $restartRow->mailing_class_code)->count();
} elseif ($mailingClassSortOrder === "id") {
// sorted by id column
$rows = MailingClass::where('id', '<=', $restartRow->id)->count();
} elseif ($mailingClassSortOrder === "description") {
// sorted by description column
$rows = MailingClass::where('description', '<=', $restartRow->description)->count();
} elseif ($mailingClassSortOrder === "updated_at") {
// sorted by updated_at column
$rows = MailingClass::where('updated_at', '<=', $restartRow->updated_at)->count();
}
}
// calculate what should be the current page
$page = intval($rows / 10) + 1;
$searchText = '';
$mailingClasses = [];
if ($mailingClassSearchLeft === '') {
if ($mailingClassRestartValue <= 0) {
$mailingClasses = MailingClass::orderBy($mailingClassSortOrder)->paginate(10);
} else {
$mailingClasses = MailingClass::orderBy($mailingClassSortOrder)->paginate(10, ['*'], 'page', $page);
}
} elseif ($mailingClassSearchLeft === 'id') {
// {deleted for sake of space}
} elseif ($mailingClassSearchLeft === 'mailing_class_code') {
// {deleted for sake of space}
} elseif (session('mailingClassSearchLeft') === 'mailing_class_description') {
// {deleted for sake of space}
} else {
// {deleted for sake of space}
}
return view(
'maintenance.mailingclass.index',
compact('mailingClasses', 'mmsGlobal', 'searchText')
);
}
mysql>显示邮件类中的列;
+--------------------+---------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+--------------------+---------------------+------+-----+---------+----------------+
|id | bigint(20)无符号| NO | PRI | NULL |自动增量|
|邮寄|类别|代码|字符(2)|否|唯一|空||
|description | varchar(255)| NO | | NULL ||
|由| id | bigint(20)无符号| NO | MUL | NULL |创建|
|上一次编辑由| id | bigint(20)unsigned | NO | MUL | NULL ||
|在|时间戳|是| |空|处创建|u|
|更新了|时间戳|是| |空||
+--------------------+---------------------+------+-----+---------+----------------+
公共职能指数()
{
$mailingClassSortOrder=会话('mailingClassSortOrder');
$mailingClassRestartValue=会话('mailingClassRestartValue');
$mailingClassSearchLeft=会话('mailingClassSearchLeft');
$mailingClassSearchRight=会话('mailingClassSearchRight');
$rows=1;
$page=0;
$restart=0;
$mcCode='';
$mcDescription='';
$mcUpdatedAt='';
如果($mailingClassRestartValue>0){
$restartRows=MailingClass::where('id','=',$mailingClassRestartValue)->get();
foreach($restartRows作为$restartRow){
$mcCode=$restartRow->邮寄类代码;
$mcDescription=$restartRow->description;
}
//如果重新启动值未出现在过滤器中,则清除过滤器
//{为节省空间而删除}
//根据排序顺序查找行位置
如果($mailingClassSortOrder==“邮寄类别代码”){
//按邮件类别代码列排序
$rows=MailingClass::where('mailing_class_code'),“感谢Dry7、Giorgio.dev和PhilMarc。你们都给了我一个答案。最终的解决方案会复杂得多。这是由于表(四列中的任何一列)的排序顺序以及我过滤掉的记录数量,页面计算发生了变化(三列中的任何一列)。除了在新记录或编辑的记录不在筛选范围内时清除筛选外,表和我的代码的最新副本(允许我保留Laravel提供的分页)如下所示:
mysql> show columns from mailing_classes;
+--------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| mailing_class_code | char(2) | NO | UNI | NULL | |
| description | varchar(255) | NO | | NULL | |
| created_by_id | bigint(20) unsigned | NO | MUL | NULL | |
| last_editted_by_id | bigint(20) unsigned | NO | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+--------------------+---------------------+------+-----+---------+----------------+
public function index()
{
$mailingClassSortOrder = session('mailingClassSortOrder');
$mailingClassRestartValue = session('mailingClassRestartValue');
$mailingClassSearchLeft = session('mailingClassSearchLeft');
$mailingClassSearchRight = session('mailingClassSearchRight');
$rows = 1;
$page = 0;
$restart = 0;
$mcCode = '';
$mcDescription = '';
$mcUpdatedAt = '';
if ($mailingClassRestartValue > 0) {
$restartRows = MailingClass::where('id', '=', $mailingClassRestartValue)->get();
foreach ($restartRows as $restartRow) {
$mcCode = $restartRow->mailing_class_code;
$mcDescription = $restartRow->description;
}
// if restart value does not appear in the filter then clear the filter
// {deleted for sake of space}
// find row position based on sort order
if ($mailingClassSortOrder === "mailing_class_code") {
// sorted by mailing_class_code column
$rows = MailingClass::where('mailing_class_code', '<=', $restartRow->mailing_class_code)->count();
} elseif ($mailingClassSortOrder === "id") {
// sorted by id column
$rows = MailingClass::where('id', '<=', $restartRow->id)->count();
} elseif ($mailingClassSortOrder === "description") {
// sorted by description column
$rows = MailingClass::where('description', '<=', $restartRow->description)->count();
} elseif ($mailingClassSortOrder === "updated_at") {
// sorted by updated_at column
$rows = MailingClass::where('updated_at', '<=', $restartRow->updated_at)->count();
}
}
// calculate what should be the current page
$page = intval($rows / 10) + 1;
$searchText = '';
$mailingClasses = [];
if ($mailingClassSearchLeft === '') {
if ($mailingClassRestartValue <= 0) {
$mailingClasses = MailingClass::orderBy($mailingClassSortOrder)->paginate(10);
} else {
$mailingClasses = MailingClass::orderBy($mailingClassSortOrder)->paginate(10, ['*'], 'page', $page);
}
} elseif ($mailingClassSearchLeft === 'id') {
// {deleted for sake of space}
} elseif ($mailingClassSearchLeft === 'mailing_class_code') {
// {deleted for sake of space}
} elseif (session('mailingClassSearchLeft') === 'mailing_class_description') {
// {deleted for sake of space}
} else {
// {deleted for sake of space}
}
return view(
'maintenance.mailingclass.index',
compact('mailingClasses', 'mmsGlobal', 'searchText')
);
}
mysql>显示邮件类中的列;
+--------------------+---------------------+------+-----+---------+----------------+
|字段|类型|空|键|默认|额外|
+--------------------+---------------------+------+-----+---------+----------------+
|id | bigint(20)无符号| NO | PRI | NULL |自动增量|
|邮寄|类别|代码|字符(2)|否|唯一|空||
|description | varchar(255)| NO | | NULL ||
|由| id | bigint(20)无符号| NO | MUL | NULL |创建|
|上一次编辑由| id | bigint(20)unsigned | NO | MUL | NULL ||
|在|时间戳|是| |空|处创建|u|
|更新了|时间戳|是| |空||
+--------------------+---------------------+------+-----+---------+----------------+
公共职能指数()
{
$mailingClassSortOrder=会话('mailingClassSortOrder');
$mailingClassRestartValue=会话('mailingClassRestartValue');
$mailingClassSearchLeft=会话('mailingClassSearchLeft');