2016-08-27 1 views
2

이 게시물은 정보를 정렬하고 질문하는 것입니다. 안녕하세요, 저는 트리거를 잘 사용하는 대형 시스템을 개발하고 있습니다. 우리는 현재 pharayadmin을 사용하여 Laravel 5.2에서 php 7로 서버 측을 실행 중입니다. Laravel 내에서 마이그레이션을 통해 트리거를 사용하는 방법에 대한 문서는별로 없으며 주로 마이그레이션을 수행해야한다는 것을 발견했습니다. 다음은 Laravel 5.x 데이터베이스 트리거 및 가능한 최상의 방법

내가 이전에 트리거를 작성하는 방법에의 알고, 간단한 예입니다 :

class CreateAccountTriggerTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     DB::unprepared(' 
      CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
      FOR EACH ROW 

      BEGIN 

      INSERT INTO `this_table` 
        (field1,field2,field3) 
      VALUES 
        ('value1','value2','value3') 

      END 
     '); 
    } 

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

[질문 : 사람이 laravel의 내부 변수를 사용하는 깨끗한 방법을 알고 있나요 쿼리 빌더?

DB :: unprepared() 메소드를 사용하면 바인딩 된 항목을 연결할 수 없습니다. Eloquent에서 그것을 시도하는 것은 불가능합니다.이 문제에 대해 찾은 확실한 문서가 없기 때문입니다. 누구든지 이것에 대해 자세히 설명 할 수 있다면 크게 감사하겠습니다. 사전에 감사

여기의 요청에 따라 내가 laravel의 쿼리 빌더 내에서 변수를 사용하여 무엇을 의미하는지의 예 것 업데이트 : 나는 당신의 질문을 오해하고있어 않는

  $stuff = bcrypt($random_numbers); 
      DB::unprepared(' 
      CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
      FOR EACH ROW 

      BEGIN 

      INSERT INTO `this_table` 
        (field1,field2,field3) 
      VALUES 
        ('value1','value2','value3',"$stuff") 

      END 
     '); 
+0

"laravel의 쿼리 작성기에서 변수 사용"의 의미를 보여줄 수 있습니까? – patricus

+0

@patricus 확실한 것! 업데이트 된 편집을 참조하십시오 –

+0

이것은 Laravel의 '모델 이벤트'에있는 응용 프로그램 중 하나입니다. 모델을'table_the_change_happened'에 첨부하고 public function boot() {parent :: boot();에 모델을 첨부 할 수있는 방아쇠는 필요 없습니다. })''parent :: boot()'뒤에 삽입을하기위한 논리를 추가 할 수 있습니다. – Ohgodwhy

답변

2

, 난 당신을 생각 unprepared() 메서드 대신 statement() 메서드를 찾고 있습니다. statement() 메서드는 쿼리와 해당 쿼리에 대한 매개 변수 바인딩 배열을 사용합니다.

아래의 예. 값 목록의 ?은 쿼리 매개 변수입니다. 해당 매개 변수에 바인딩 할 값은 statement() 메서드에 대한 두 번째 매개 변수로 전달 된 배열에 추가됩니다.

$stuff = bcrypt($random_numbers); 
DB::statement(' 
     CREATE TRIGGER `my_trigger_name` AFTER INSERT ON `table_the_change_happened` 
     FOR EACH ROW 

     BEGIN 

     INSERT INTO `this_table` 
      (field1,field2,field3) 
     VALUES 
      ('value1','value2','value3',?) 

     END 
    ', [$stuff]); 
+0

나는 그것이 가까이에있는 것처럼 느낀다.하지만 statement 메서드는 트리거가 완전히 생성되는 것을 막는다. 나는 그것이 어느 시점에 행동해야하기 때문이라고 생각한다. –

+0

내가 올바른 방향으로 가고 있기 때문에 +1을주었습니다. 나는 올바른 방향으로 머리를 기울여 주셔서 감사합니다! 아래는 나의 대답이다. –