【问题标题】:Getting the next item in an array based on the ID of the previous item [closed]根据前一项的ID获取数组中的下一项[关闭]
【发布时间】:2016-11-07 09:19:06
【问题描述】:

一点背景资料

我使用 AngularJS 作为前端框架,并使用 Laravel 作为前端通信的 API。

问题

对于这个应用程序,我有一个“部分”,在视图中有一个下一个/上一个按钮,当单击下一个时,会使用当前部分 ID 作为参数进行 API 调用。由此,我希望根据我使用的端点(单击哪个按钮)来获取数组中的下一个或上一个项目。

我将如何在 PHP/Laravel 中解决这个问题,是否有可能或者我应该重新考虑我的应用程序/api 的结构?

我现在拥有的

所以目前,我只有一个“Section”集合:

$sections = Section::orderBy('order', 'DESC')->orderBy('id', 'ASC')->get();

【问题讨论】:

    标签: php arrays angularjs laravel laravel-5


    【解决方案1】:

    使用普通 SQL 可以通过以下方式获取下一项。

    SELECT *
    FROM TABLE_NAME
    WHERE COLUMN_ID =
        (SELECT min(COLUMN_ID)
         FROM TABLE_NAME
         WHERE COLUMN_ID > REPLACE_PREVIOUS_ID_HERE)
    

    在上面的查询中,子查询只是在你的上一个键之后找到下一个 COLUMN_ID 并将其返回给主查询。

    【讨论】:

    • 问题在于排序,我不能使用 ID,因为有时“订单”列会覆盖它,例如,用户可以输入 ID 为 1、2、3、4 的 5 个部分, 5. 但是用户随后决定他们希望 Section ID 3 首先出现在前端,所以他们将 order 列设置为 4。我们的新 Section 数组现在将是 3, 1, 2, 4, 5。
    • @SeriousJelly:您应该在问题中提前提及此类限制。
    【解决方案2】:

    您可以使用Pagination

    $sections = Section::orderBy('order', 'DESC')->orderBy('id', 'ASC')->paginate(2);
    return response()->json($sections );
    

    然后你会得到类似的东西(我转换成json)

    {
        "total": 17,
        "per_page": 2,
        "current_page": 1,
        "last_page": 9,
        "next_page_url": "{{URL}}?page=2",
        "prev_page_url": null,
        "from": 1,
        "to": 2,
        "data": [
            {
                "id": 40,
                "order":1
            },
            {
                "id": 41,
                "order":2
            },
         ]
     }
    

    现在使用“next_page_url”或“prev_page_url”形式的url

    【讨论】:

    • 这可能有点问题,不敢相信我还没有尝试过这个。马上调查!
    • 如果您需要其他任何东西,请告诉我
    • 好的,我已经实现了这种方法,并且效果很好!谢谢
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2012-02-27
    相关资源
    最近更新 更多