laravel 4.1에서 작업 중입니다. 마이 그 레이션 MYSQL 함수를 만들려는하지만 php artisan migrate
함께 작동하지 않습니다. 콘솔에 Migrated: 2017_01_10_140002_create_MYSQL_UNAVAILABLE_PRODS_FUNCTION
이 표시 되더라도 마찬가지입니다. MYQL 클라이언트에서 동일한 생성 코드를 복사/지나치면 작동하고 함수가 만들어집니다. 그리고 php artisan migrate:rollback
을 실행하면 함수가 제거됩니다.
도움이 될 것입니다.Laravel 4 마이그레이션에서 MYSQL FUNCTION 만들기
마이그레이션 파일 :
<?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;');
}
}
Eloquent를 사용하지 않는 이유는 무엇입니까? – Buglinjo
그 양식의 데이터와 함께 DB에있는 info라는 필드가 있습니다 ** config_id1 = prod_id1 | config_id2 = prod_id2 | ... ** 그래서 PHP를 사용하여 수백 개의 ID 목록을 보내서 성능을 테스트하는 대신 문제는 MYSQL 쪽에서하는 것이 더 낫다는 것이다. 그리고 그 필드가 값 목록에서 쌍 키 = 값이 있는지 확인해야합니다. 예 : 41 = (202 | 101 ..) : SELECT ... WHERE info REGEXP UNAVAILABLE_PRODS (41, 64)'. 함수 실행 후 결과는 다음과 같을 것입니다. SELECT ... WHERE info REGEXP '41 = (prod_id1 | prod_id2 ...) '': –