Заказать движение банка по дате и остатку - PullRequest
1 голос
/ 21 апреля 2019

У меня есть таблица с банковскими движениями, я импортирую эти движения из файлов CSV и JSON, каждое движение имеет сумму и баланс рядом с ним.

+------------------+------------------+------+-----+---------+----------------+
| Field            | Type             | Null | Key | Default | Extra          |
+------------------+------------------+------+-----+---------+----------------+
| id               | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| cuenta_banco_id  | int(11)          | NO   |     | NULL    |                |
| referencia       | varchar(191)     | NO   |     | NULL    |                |
| monto            | decimal(10,2)    | NO   |     | NULL    |                |
| saldo            | decimal(10,2)    | NO   |     | NULL    |                |
| type             | int(11)          | NO   |     | NULL    |                |
| user_id          | int(11)          | NO   |     | NULL    |                |
| fecha_movimiento | datetime         | NO   |     | NULL    |                |
| created_at       | timestamp        | YES  |     | NULL    |                |
| updated_at       | timestamp        | YES  |     | NULL    |                |
+------------------+------------------+------+-----+---------+----------------+
10 rows in set (0.08 sec)

{
    "Date": "22/04/2019",
    "Operation": "MC",
    "Reference": "15",
    "Description": "TRANSF. VIA INTERNET          ",
    "Amount": "10000.00",
    "Balance": "1869255.04"
  }

Файл полностью импортируется в базу данных, дело в том, что мне нужно правильно сортировать его при отображении данных

Мне нужно отображать движения в порядке убывания по дате, а также правильно отображать баланс.

Пример того, что мне нужно:

enter image description here

И вот как я получаю движения:

+------+-----------------+-------------+------------+-----------+------+---------+---------------------+---------------------+---------------------+
| id   | cuenta_banco_id | referencia  | monto      | saldo     | type | user_id | fecha_movimiento    | created_at          | updated_at          |
+------+-----------------+-------------+------------+-----------+------+---------+---------------------+---------------------+---------------------+
| 3367 |               4 | 2297353555  |   10000.00 | 665445.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3366 |               4 | 2297322435  |   11000.00 | 655445.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3398 |               4 | 2297751229  |   11000.00 | 651695.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:34 | 2019-04-20 18:15:34 |
| 3362 |               4 | 2297311718  |   12000.00 | 651445.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3343 |               4 | 2296877327  |   10000.00 | 649845.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3365 |               4 | 2297317974  | -525000.00 | 644445.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3431 |               4 | 2298293430  |   13000.00 | 643195.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:35 | 2019-04-20 18:15:35 |
| 3397 |               4 | 2297748073  |   15900.00 | 640695.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:34 | 2019-04-20 18:15:34 |
| 3342 |               4 | 2296823905  |   30000.00 | 639845.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
| 3361 |               4 | 64665863950 |  500000.00 | 639445.90 |    0 |       1 | 2019-04-20 23:59:59 | 2019-04-20 18:15:33 | 2019-04-20 18:15:33 |
+------+-----------------+-------------+------------+-----------+------+---------+---------------------+---------------------+---------------------+
10 rows in set (0.00 sec)

Поле cuenta_banco_id идентифицирует банк, которому принадлежат движения, но нет связи между движениями разных банков.

Это на Laravel 5.7 и MySQL 5.7.23, я использую запрос:

$movimientos = Movimiento::query();
$movimientos->where('cuenta_banco_id', $request->banco);
$movimientos->whereBetween(DB::raw('date(fecha_movimiento)'), [$start->startOfDay()->format('Y-m-d H:i:s'), $end->endOfDay()->format('Y-m-d H:i:s')]);
$movimientos->with('recargas', 'banks', 'recargas.transactions', 'movimientos_detalles', 'recargas.transactions.siteuser');
$movimientos->orderBy('created_at', 'DESC');
$movimientos = $movimientos->paginate(50);

Как мне добиться того, что мне нужно?

1 Ответ

2 голосов
/ 21 апреля 2019

Насколько я понимаю, ваши транзакции упорядочены по времени (т. Е. Дата транзакции DESC, а затем время создания ASC). А поскольку вы используете положение where для идентификатора банка, мы рассматриваем здесь транзакции только одного банка (мне не ясно, охватывает ли он транзакции всех пользователей. Если это так, нам нужно разделить пользователей перед применением Сортировать по). Предполагая, что «fecha_movimiento» фиксирует дату транзакции, а «id» фиксирует порядок транзакции, вы можете попробовать что-то вроде этого:

$movimientos->orderBy(DB::raw('date(fecha_movimiento)'), 'DESC')
            ->orderBy('id','ASC');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...