CakePHP группа и количество - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблемы с выяснением этого.

У меня есть следующие 3 таблицы: -

Таблица транзакций

  • ID
  • Дата
  • Элемент списка

Таблица продуктов

  • ID

  • Имя

  • Цена

Products_Transaction Table

  • Transaction_ID

  • Product_ID

  • Количество

Таким образом, отношения следующие - транзакциявыполняется, и затем таблица products_transactions объединяет их, поскольку транзакция может иметь несколько продуктов, а продукт может иметь несколько транзакций.Join_table также отслеживает проданную сумму, поэтому, например, газета продается в транзакции № 1 и с количеством 2 (таким образом продано 2 газеты).

Теперь я хочу сделать заявление MySQLкоторый находит все проданные продукты, в определенный интервал дат, поэтому я получаю что-то вроде этого: -

  • 3 х газет
  • 12 х газированных напитков
  • 15 х пива

Итак, он просто подсчитывает и суммирует все проданные продукты.

Я серьезно все перепробовал - я работаю с CakePHP, поэтому предложенное решение будет полезным, нодаже простой SQL для достижения этой цели может помочь мне.

Пока что это то, что у меня есть: -

$productTransactionsTable = TableRegistry::get('products_transactions');
    $productsTransactions = $productTransactionsTable->find('all');
    $productsTransactions->matching('transactions', function ($q) {
        return $q->where([
            'transaction_date >=' => new \DateTime('-1 week'),
            'transaction_date <=' => new \DateTime('now'),
            'device_id IN' => $this->deviceIdsInDepartment(2)
        ]);
    });
    $productsTransactions->contain(['products']);

    $productsTransactions->select([
        'count' => $productsTransactions->func()->count('quantity'),
        'name' => 'products.name'
    ]);

    $productsTransactions->groupBy('products.id');

Но это просто выдает 1 единственный результат, который считает все вместев 1 строку, например:

/src/Controller/EconomyController.php (line 665)

[(int) 0 => object (Cake \ ORM \ Entity) {

    'count' => (int) 4504,
    'name' => 'D Morgenbrød',
    '[new]' => false,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'products_transactions'

}

]

Любая помощьценится!Я серьезно застрял здесь!

Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что вы подсчитываете общее количество проданных количеств и группируете, так что вы получаете результаты выше. Я думаю, вам нужно попробовать следующий подход:

$data = $query
    ->select([
      'name' => 'products.name',
      'quantity' => 'products.quantity',
    ])
    ->group('products.id');
...