2014-12-10 17 views
13

Taşımadan MySQL saklı yordamı oluşturdum ve gayet iyi çalışıyor.Laravel, Göçten MySQL tetikleyicisi oluştur

DB::unprepared(' 
    CREATE PROCEDURE sp_Create_Default_Task_1(IN _kid_id INT) 
    BEGIN 
     INSERT INTO tasks (kid_id, name) VALUES (_kid_id, \'daily\'); 
    END' 
    ); 

Ahiret ben kodu

<?php 

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

class CreateTrigger extends Migration { 

    public function up() 
    { 
     DB::unprepared(' 
     CREATE TRIGGER tr_Task_Default AFTER INSERT ON `kids` FOR EACH ROW 
      INSERT INTO tasks (`kid_id`, `name`) VALUES (NEW.id, \'Default\'); 
     '); 
    } 


    public function down() 
    { 
     DB::unprepared('DROP TRIGGER `tr_User_Default_Member_Role`'); 
    } 
} 

aşağıdaki MySQL tetikleyici oluşturmak için aynı şeyi yapmaya çalıştık Ama ben çalıştırdıktan sonra hata verir php artisan migrate

{"error":{"type": 
"Symfony\\Component\\Debug\\Exception\\FatalErrorException", 
"message":"Class 'CreateTriggers' not found", 
"file":"C:\\xampp\\htdocs\\dev03\\vendor\\laravel\\framework 
\\src\\Illuminate\\Database\\Migrations\\Migrator.php", 
"line":301}} 

Soru: Ne oluyor yanlış?

+1

Dosyanın tamamını gönderin. Sınıf isminiz yanlış görünüyor mu? – Laurence

+0

Şimdi çözdüm, o bir şey oldu –

cevap

19

Sınıf adında bir sorun vardı.

Doğru sınıf adı VEYA yaptığım gibi yapmanıza yardımcı olabilir, Çalışma tetikleme kodunu geçici olarak not defterine/metne kopyalayın. Eski taşıma tetikleyici dosyasını silin ve yeni bir tane oluşturun.

Not: Bu arada, aynı çözelti laravel 4.x ve laravel 5.x

laravel olarak
php artisan migrate:make create_trigger 

php artisan make:migration create_trigger 
laravel 5, için de geçerlidir

Oluşturulduktan sonra aynı Trigger kodunu not defterimden/metnimden kopyalayıp yapıştırıyorum ve gayet iyi çalışıyor.

Taşıma sırasında tetikleyici oluşturmaya yönelik son çalışma kodu.

her ikisi de RAW ve UNPREPARED yöntemiyle çalışır.

<?php 

use Illuminate\Database\Migrations\Migration; 

class CreateTrigger extends Migration { 

    public function up() 
    { 
     DB::unprepared(' 
     CREATE TRIGGER tr_User_Default_Member_Role AFTER INSERT ON `users` FOR EACH ROW 
      BEGIN 
       INSERT INTO role_user (`role_id`, `user_id`, `created_at`, `updated_at`) 
       VALUES (3, NEW.id, now(), null); 
      END 
     '); 
    } 

    public function down() 
    { 
     DB::unprepared('DROP TRIGGER `tr_User_Default_Member_Role`'); 
    } 
} 

Not: Bu kök konsepti

2

Run composer dumpautoload çalışması gerektiği (artisan aynı yerde) göstermek için sadece bir örnektir.

0

Laravel 5'te, yalnızca DB :: unprepared() yöntemiyle çalışır.

+1

sınıf adı ile bir şey cevap için zaman ayırdığınız için teşekkürler. Bu, bir topluluk olarak birlikte öğrenebileceğimiz, sizin gibi yardımcı arkadaşlarımız içindir. İşte cevabınızı nasıl mükemmelleştireceğinize dair birkaç ipucu: [İyi bir cevabı nasıl yazarım] (https://stackoverflow.com/help/how-to-answer). – Brien

İlgili konular