【问题标题】:How combine data from two models and sort them by created date (time object) in cakephp?如何组合来自两个模型的数据并在 cakephp 中按创建的日期(时间对象)对它们进行排序?
【发布时间】:2016-03-08 06:44:22
【问题描述】:

模型 Messages 和 Files 属于 Conversations。 Messages 和 Files 都有一个已创建的 DATETIME 字段。

我想选择属于特定对话的所有消息和文件,并根据创建日期将它们放入同一个提要中。

怎么做?

这是我尝试过的。

//Get us a conversation with all Files and Messages
$conversations = $this->Users->Conversations->find();
$conversations->contain([
  'Files' => function ($q)
             {
               return $q->order('Files.created ASC');
             },
  'Messages' => function ($q)
                {
                  return $q->order('Messages.created ASC');
                },
  'Messages.Users',
  ]);
  $conversations->where(['Conversations.id' => $conversationID]);

//Now we want to sort the files an messages according to created date
$converted = $conversations->toArray();
$allEntities = array_merge($converted[0]['files'],$converted[0]['messages']);
$allEntities = Hash::sort($allEntities,'{n}.created','asc');

这在任何不是时间对象的字段上都像一个魅力,例如 id。

我已经阅读了这个问题Combining lists of data from Multiple Models and sort them by date created in cakephp

但由于 cakephp 3 将日期时间转换为时间对象,我无法让 Hash::sort 工作。

如果可以以某种方式关闭时间对象,则可能是一种方法。这对我来说主要是让事情变得更麻烦。

有什么建议吗?

【问题讨论】:

    标签: sorting cakephp cakephp-3.x


    【解决方案1】:

    有什么建议吗?

    将您的文件直接链接到messages 表,而不是将它们链接到对话。您可以使用消息正文字段(或任何您称之为保存消息的字段)将任何数据序列化到其中(例如,如果您想稍后翻译这些值)或者只是在其中包含一个文本字符串“Foo send File酒吧。”

    如果您将message_type 字段添加到您的消息表中,您可以在该字段中使用字符串来标识消息的类型,例如system

    您当前的架构使它在数据库和应用程序级别变得相当复杂,比必要的复杂得多。

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2020-09-25
      • 1970-01-01
      • 2019-10-11
      • 2023-03-18
      • 2014-04-16
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多