dslh32311
2017-01-10 15:26
浏览 98
已采纳

在Laravel 4迁移中创建MYSQL功能

I am working on laravel 4.1. I want to create MYSQL function with migration but it doesn't work with php artisan migrate. even if it shows Migrated: 2017_01_10_140002_create_MYSQL_UNAVAILABLE_PRODS_FUNCTION in the console. and when i copy/past the same creation code in MYQL client, it works and the function is created. and when i run php artisan migrate:rollback the function is removed.
Any help would be appreciated.

the migration file :

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMYSQLUNAVAILABLEPRODSFUNCTION extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        $available = Constant::PRODUCT_AVAILABLE_TRUE | Constant::PRODUCT_AVAILABLE_STOCK_TRUE;

        $sql = 'DROP FUNCTION IF EXISTS UNAVAILABLE_PRODS;
                DELIMITER $$
                CREATE FUNCTION UNAVAILABLE_PRODS(CONFIG_ID INT, PROD_TYPE INT)
                  RETURNS TEXT
                  LANGUAGE SQL
                BEGIN
                    DECLARE RES TEXT;

                    SET GROUP_CONCAT_MAX_LEN = 2048;

                    SET RES = (SELECT GROUP_CONCAT(ID SEPARATOR \'|\') FROM PRODUCT_BASE WHERE `PRODUCT_TYPE` & PROD_TYPE AND `PRODUCT_BASE`.`AVAILABLE` <> ' . $available . ');

                    RETURN CONCAT(CONFIG_ID, \'=(\', RES, \')\');
                END;
                $$
                DELIMITER ;
                ';

        DB::unprepared($sql);
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::unprepared('DROP FUNCTION IF EXISTS UNAVAILABLE_PRODS;');
    }

}

图片转代码服务由CSDN问答提供 功能建议

我正在研究laravel 4.1。 我想通过迁移创建MYSQL函数,但它不能与 php artisan migrate 一起使用。 即使它在控制台中显示 Migrated:2017_01_10_140002_create_MYSQL_UNAVAILABLE_PRODS_FUNCTION 。 当我在MYQL客户端中复制/过去相同的创建代码时,它可以工作并创建函数。 当我运行 php artisan migrate:rollback 时,该函数将被删除。
任何帮助将不胜感激。

迁移文件:

 &lt;?php 
 
use Illuminate \ Database \ Schema \ Blueprint; 
use Illuminate \ Database \ Migrations \ Migration; 
 
class CreateMYSQLUNAVAILABLEPRODSFUNCTION extends Migration 
 {
 
  / ** 
 *运行迁移。
 * 
 * @return void 
 * / 
公共函数up()
 {
 $ available = Constant :: PRODUCT_AVAILABLE_TRUE | 常量:: PRODUCT_AVAILABLE_STOCK_TRUE; 
 
 $ sql ='DROP FUNCTION如果EXISTS UNAVAILABLE_PRODS; 
 DELIMITER $$ 
 CREATE FUNCTION UNAVAILABLE_PRODS(CONFIG_ID INT,PROD_TYPE INT)
返回文本
语言SQL 
 BEGIN 
 DECLARE  RES TEXT; 
 
 SET GROUP_CONCAT_MAX_LEN = 2048; 
 
 SET RES =(SELECT GROUP_CONCAT(ID SEPARATOR \'| \')FROM PRODUCT_BASE WHERE`PRODUCT_TYPE`&amp; PROD_TYPE AND`PROFET_BASE``AVAILABLE`&lt;  &gt;'。$ available。'); 
 
 RETURN CONCAT(CONFIG_ID,\'=(\',RES,\')\'); 
 END; 
 $$ 
 DELIMITER; 
'  ; 
 
 DB :: unspared($ sql); 
} 
 
 / ** 
 *反转迁移。
 * 
 * @return void 
 * / 
公共函数关闭(  )
 {
 DB :: withoutpared('DROP FUNCTION IF EXISTS UNAVAILABLE_PRODS;'); 
} 
 
} 
   
  
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • dpjs2005 2017-01-12 10:36
    最佳回答

    I figured out what the problem was, it's the delimiters. it worked after i removed the lignes DELIMITER $$ , $$ and DELIMITER ;

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题