Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel很有说服力,我如何开始从结果集中列出数据?_Php_Laravel_Eloquent - Fatal编程技术网

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');