Laravel неправильный формат даты возврата mongodb при использовании агрегированного запроса - PullRequest
0 голосов
/ 10 июля 2020

Я использовал aggregated с $facet для фильтрации пользователей списка из коллекций с необработанным запросом от jenssegers / laravel -mongodb. Но данные, которые я получил, имеют формат:

{
  "list": [
      {
        "_id": 1,
        "activated": 1,
        "status": 1,
        "created_at": {
          "$date": {
            "$numberLong": "1591626995341"
          }
        },
        "updated_at": {
          "$date": {
            "$numberLong": "1591627007461"
          }
        },
        "register_at": {
          "$date": {
            "$numberLong": "1591627007376"
          }
        }
      },
      ....
  ],
  "option":{
      "total":12,
      "offset":0,
      "limit":10

  }

Я хочу получить только формат даты created_at:"Y-m-d H:i:s"

PS: Я могу использовать $addFields и $dateToString как показано ниже

        $aggregate = [
            $matched,
            ['$sort' => ['_id' => 1]],
            [
                '$facet' => [
                    'list' => [
                        ['$skip' => $offset],
                        ['$limit' => $limit],
                        [
                            '$addFields' => [
                                'register_at' => [
                                    '$dateToString' => [
                                        'date' => '$register_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ],
                                'created_at' => [
                                    '$dateToString' => [
                                        'date' => '$created_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ],
                                'updated_at' => [
                                    '$dateToString' => [
                                        'date' => '$updated_at',
                                        'format' => '%Y-%m-%d %H:%M:%S'
                                    ]
                                ]
                            ]
                        ],
                        ['$project' => ['password' => 0]]
                    ],
                    'option' => [
                        ['$count' => 'total'],
                        [
                            '$addFields' => [
                                'offset' => $offset,
                                'limit' => $limit
                            ]
                        ]
                    ]
                ]
            ]
        ];

для переформатирования структуры json ответа, но не моего желания.

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете использовать Eloquent Mutators, Date Casting ваших created_at, updated_at и register_at, используя, В вашей модели

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class YourModel extends Model
    {
        // some code ...
        
        public function getCreatedAtAttribute($created_at){
            return date("Y-m-d H:i:s", $created_at);
        }
        public function getUpdatedAtAttribute($updated_at){
            return date("Y-m-d H:i:s", $updated_at);
        }
        public function getRegisterAtAttribute($register_at){
            return date("Y-m-d H:i:s", $register_at);
        } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...