将 Laravel 集合排序到 ID 数组

2023-11-27

是否可以使用单独的 ID 数组来订购关系集合,同时仍然通过关系进行访问?

设置是Checklist有很多ChecklistItems 以及相关项的所需顺序作为属性存在Checklist::$item_order。它只是按用户所需顺序排列的数字 ID 数组。 :

class Checklist extends Model {
    protected $casts = ['item_order' => 'array'];

    public function items() {
        return $this->hasMany(ChecklistItem::class);
    }
}
class ChecklistItem extends Model {
    public function list() {
        return $this->belongsTo(Checklist::class);
    }
}

我以正常方式访问这种关系:

$list = Checklist::find(1234);

foreach ($list->items as $item) {
    // More Code Here
}

有可行的订购方式吗$list->items基于中的值$list->item_order array?

(我不能只将“顺序”列添加到“项目”表中,因为每个“列表”的顺序都会发生变化。)


你可以这样做:

$order = $list->item_order;
$list->items->sortBy(function($model) use ($order){
    return array_search($model->getKey(), $order);
}

您还可以向模型添加一个属性访问器,其作用相同

public function getSortedItemsAttribute() 
{
    if ( ! is_null($this->item_order)) {
        $order = $this->item_order;

        $list = $this->items->sortBy(function($model) use ($order){
            return array_search($model->getKey(), $order);
        });
        return $list;
    }
    return $this->items;
}

Usage:

foreach ($list->sortedItems as $item) {
    // More Code Here
}

如果您在多个地方需要此类功能,我建议您创建自己的 Collection 类:

class MyCollection extends Illuminate\Database\Eloquent\Collection {

    public function sortByIds(array $ids){
        return $this->sortBy(function($model) use ($ids){
            return array_search($model->getKey(), $ids);
        }
    }
}

然后,实际使用该类覆盖newCollection()在你的模型中。在这种情况下,它将位于ChecklistItems class:

public function newCollection(array $models = array())
{
    return new MyCollection($models);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Laravel 集合排序到 ID 数组 的相关文章

  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • 在 PHP 中包含 PHP 文件

    我有一个网站 它运行 PHP if 语句来根据附加文件的类型 即 Jpg Txt MP4 显示内容 所以我显示 TXT 文件的代码是 if post attachment txt display attachment div class d
  • Smarty 如果 URL 包含

    使用 Smarty 标签我想确定 URL 是否包含单词 例如 if smarty get page contains product php 我知道 contains 不存在 但是我怎样才能轻松地编写类似的东西来实现上述代码呢 所有 PHP
  • 使用 ImageMagick 和 PHP 将 PNG 转换为 JPG 并将透明背景设置为白色

    将图像从 PNG 转换为 JPEG 时 如何使用 ImageMagick 带有 php 扩展 将透明背景设置为白色 在撰写本文时 您尚未指定正在使用哪个扩展 但如果您使用命令行 则命令将是 convert image png backgro
  • Laravel S3 检索视频以流式传输

    我通过 Laravel 应用程序将视频存储到 Amazon S3 效果很好 但我无法 流式传输 它们 这是例如 URL https website com video 342 qt api token a5a18c9f f5f6 5d66
  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • Firemonkey 中的动画 GIF

    我正在尝试使用 TImage 以 Firemonkey HD 形式显示动画 GIF 但我没有看到任何动画方法 使用 Vcl Imaging gifImg 不是一个选项 因为类型不同 有人可以建议一种方法来解决这个问题 或者可能是在 Fire
  • 你能列出函数接收的关键字参数吗?

    我有一个字典 我需要将键 值作为关键字参数传递 例如 d args kw1 value1 kw2 value2 example d args 这工作正常 but如果 d args 字典中存在不被接受的值example函数 它显然死了 比如说
  • 执行 JaCoCo 时出现“由于缺少执行数据文件而跳过 JaCoCo 执行”

    我正在使用 Maven 3 0 3 JUnit 4 8 1 和 Jacoco 0 6 3 201306030806 并且我正在尝试创建测试覆盖率报告 我有一个仅包含单元测试的项目 但无法运行报告 我反复收到错误 Skipping JaCoC
  • 按关系值对集合进行排序

    我想通过嵌套关系的属性对 laravel 集合进行排序 所以我查询所有项目 仅当项目有与当前用户相关的任务时 然后我想按任务关系的截止日期对项目进行排序 当前代码 项目 php public function tasks return th
  • 如何监控 Oracle 上的 SQL 活动? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想找到一个类似于 SQL Server Profiler 的 Oracle 工具 但粗略搜索并没有得到任何好的结果 我只想实时查看我的应用程序对数据库进行的查询 有什么建议么 Or
  • 如何将函数传递给 julia Gadfly 主题参数

    我做了一个这样的情节 plot layer x sort randn 1000 1 y sort randn 1000 1 Geom point layer x 4 4 y 4 4 Geom line Theme default color
  • Go 中的通用可变参数?

    我知道 Go 不支持模板或重载函数 但我想知道是否有任何方法可以对可变参数函数进行某种泛型编程 我有很多功能 例如 func this Document GetString name string defaults string strin
  • 在 std 命名空间中添加模板专业化

    背景 我试图回答这个问题为什么我的重载 我的建议之一 除了使用谓词之外 是移动自定义operator lt for std string位于命名空间 std 中 以便编译器比模板化版本更喜欢它 答案以闪电般的速度被否决 来自一位知名用户的评
  • 错误:格式不受支持,或文件损坏:需要 BOF 记录

    我正在尝试打开一个 xlsx 文件并打印它的内容 我一直遇到这个错误 import xlrd book xlrd open workbook file xlsx print The number of worksheets is book
  • ExpressJS 中的 req.query 和 req.param

    之间的主要区别req query and req param在快递中 两者有何不同 何时使用 then 在什么情况下使用 假设客户端在请求中发送 Android 键 值 对 使用哪一个 EDIT 假设android发送一个POST请求 gt
  • 如何在命令行上将文件名和扩展名分隔成变量

    我需要将文件 x dtsx 从位置 a 复制到位置 b 如果 x dtsx 已经存在于 b 中 那么我需要将 x dtsx 重命名为 x Standby dtsx 然后 重命名后将 x dtsx 复制到 b 我当前的代码如下所示 if ex
  • 如何在不创建 Umbrella 框架的情况下构建依赖于另一个框架的 iOS 框架

    我试图通过创建一些可重用的框架来简化我的开发 这些框架包含我在多个项目中经常重用的功能 然而 在设置我的框架之一时 我遇到了一个问题 这些类依赖于 Firebase 框架 阅读 Apple 文档后 不建议创建伞框架 一个嵌入另一个框架的框架
  • 使用 Unity\T4\anything 进行面向方面的日志记录

    在我的应用程序中 我们有一个跟踪记录器 我们在大多数重要方法的开头和结尾添加了日志语句 用于跟踪方法名称和参数值 现在这些跟踪语句使代码变得臃肿 阅读它们有点痛苦 我正在考虑如何将代码的这方面与我的业务逻辑分开 今天在读Unity的拦截框架
  • 我们如何使用Cocos2d来显示UIViewController和UIView?

    我正在尝试使用 Cocos2d 构建 iPhone 应用程序 但是我使用了四种类型的类 就像下面这样 interface MenuScene Scene end interface FlipView UIImageView CGPoint
  • 设置 blob 的过期限制

    我使用 Azure Storage 来存储信息 例如缓存机制 因此 对于给定的输入 我是第一次执行该工作 之后我会将结果保存在缓存中以供进一步使用 当我需要使用相同的给定输入解决问题时 我将直接从存储中获取已经准备好的解决方案 这一切都已实
  • 使用队列的异步持久客户端协议类

    我正在尝试了解 Python 3asyncio模块 特别是使用传输 协议 API 我想创建一个发布 订阅模式 并使用asyncio Protocol类来创建我的客户端和服务器 目前 我已经启动并运行了服务器 并侦听传入的客户端连接 客户端能
  • Microsoft.Build.Utilities.FileTracker 引发异常错误。发生在不同的项目中

    最近在 Win7 64 位中使用 Visual Studio 2010 Ultimate C 编译任何项目时都会出现以下错误 解决方法是添加
  • 如何使用 python 电子邮件获取解码附件文件名?

    我使用以下代码来提取附件的文件名 import email utils msg email message from string self request body http docs python org 2 library email
  • JNI。如何从 jobject 获取 jstring 并将其转换为 char*

    这是我到目前为止所拥有的 我传递一个有 2 个字段的对象 String 和 Integer 作为参数 我想发送信息来在C部分中处理它 这在这一点上并不重要 我在 jstring 声明中收到投诉 JNIEXPORT jint JNICALL
  • 将 Laravel 集合排序到 ID 数组

    是否可以使用单独的 ID 数组来订购关系集合 同时仍然通过关系进行访问 设置是Checklist有很多ChecklistItems 以及相关项的所需顺序作为属性存在Checklist item order 它只是按用户所需顺序排列的数字 I