CakePHP MySQL – procedury składowane

Utworzenie procedury składowanej w MySQL

DELIMITER $$
CREATE PROCEDURE low_amount()
BEGIN
SELECT ip.id, ip.product_id, ip.brand_id, ip.amount_alert, ip.is_ordered, SUM(ip.amount) AS suma, 
       p.name AS product, b.initials, b.name AS brand
FROM item_packs ip 
    INNER JOIN products p ON p.id=ip.product_id
    INNER JOIN brands   b ON b.id=ip.brand_id
GROUP BY ip.product_id, ip.brand_id
HAVING suma <= ip.amount_alert;
END $$
DELIMITER ;
SHOW PROCEDURE STATUS    -- wszystkie procedury

SHOW PROCEDURE STATUS [LIKE 'my_procedure' | WHERE search_condition]

SHOW CREATE PROCEDURE my_procedure;
DROP PROCEDURE [IF EXISTS] my_procedure;

SHOW PROCEDURE STATUS WHERE Db='myDababaseName' \G
DELIMITER $
CREATE PROCEDURE user_projects(p_user_id INT)
BEGIN
  SELECT p.id, p.status_id, COUNT(*) AS count,
        SUM(p.price) AS total, SUM(p.price * (ch.percent / 100)) AS weighted
  FROM projects p
   LEFT JOIN chances ch ON p.chance_id=ch.id
  WHERE p.manager_id = p_user_id
   AND p.status_id <> 3                        -- bez odrzuconych
  GROUP BY p.status_id ;
END $
DELIMITER ;

Wywołanie procedury w CakePHP 3

$connection = \Cake\Datasource\ConnectionManager::get('default');

$results = $connection->execute('CALL low_amount()')->fetchAll('assoc');

$this->set(compact('results'));

Dodaj komentarz