0

laravel 4に準備済みステートメントを入れる方法を知りたいです。

MySQL Workbench で作成した準備済みステートメントは次のとおりです。

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) i', `payroll_item_id`)
  ) INTO @sql
FROM payroll_item_settings;

SET @sql = CONCAT('SELECT  employee_id, ', @sql, ' FROM payroll_item_settings GROUP BY employee_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
4

1 に答える 1

0

回避策を見つけました。次のようなストアド プロシージャを使用しました。

DELIMITER $$

CREATE PROCEDURE employees_payroll_settings()

BEGIN

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`payroll_item_id` = ', `payroll_item_id`, ', amount, NULL)) AS `', payroll_items.payroll_item, '`')
  ) INTO @sql
FROM payroll_item_settings 
JOIN payroll_items 
ON payroll_items.id = payroll_item_settings.payroll_item_id;

SET @sql = CONCAT('SELECT  employees.employee_name, ', @sql, ' FROM payroll_item_settings JOIN employees ON employees.id = payroll_item_settings.employee_id GROUP BY employee_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END $$

DELIMITER ;

次に、コントローラーに次のようなものを入れました。

$payroll_items = DB::table('payroll_items')
                ->distinct()
                ->join('payroll_item_settings', 'payroll_items.id', '=', 'payroll_item_settings.payroll_item_id')
                ->select('payroll_items.*', 'payroll_item_settings.payroll_item_id')
                ->get();
        $payroll_item_settings = DB::select('CALL employees_payroll_settings()');
        return View::make('payroll_item_setting.index', array(
                    'payroll_item_settings' => $payroll_item_settings,
                    'payroll_items' => $payroll_items
        ));
于 2013-11-10T11:21:56.667 に答える