2014年12月18日 星期四

Laravel database 用法

其實也不一定要用laravel內的作法來建立資料表
但是用了好幾個好處,你可以快速的重建你的db,恢復,以及初始化資料表內容更彈性。

我用的到的也不多,就以下這幾句
php artisan migrate:make create_users_table//建立一支migrate檔
php artisan migrate//執行資料夾裡所有的migrate檔(建立
php artisan migrate:reset//執行資料夾裡所有的migrate檔(清除
php artisan db:seed//餵資料表資料

範例:以產生一個表的資料來說~
php artisan migrate:make create_users_table
會產生一支檔案 如:2014_12_17_213725_create_users_table.php
在/app/database/migrations/底下
裡面會有up跟down 2個function,
up是執行php artisan migrate時用的,down 是php artisan migrate:reset時用的
up裡寫上建表的script
// Creates the users table
        Schema::create('users', function($table)
        {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->string('username');
            $table->string('email');
            $table->string('password');
            $table->string('confirmation_code');
            $table->string('remember_token')->nullable();
            $table->boolean('confirmed')->default(false);
            $table->timestamps();
        });
down裡寫上清除的script
        Schema::drop('users');

接著執行 php artisan migrate就會建立新表了,執行php artisan migrate:reset又會清掉這張表

在/app/database/seeds/底下 有一支DatabaseSeeder.php
在裡面寫上要呼叫seed的檔案 如
Eloquent::unguard();

        // Add calls to Seeders here
        $this->call('UsersTableSeeder');

這支UsersTableSeeder放在同一層
class UsersTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->truncate();
        //DB::table('users')->delete();

        $users = array(
            array(
                'username'      => 'admin',
                'email'      => 'admin@test.org',
                'password'   => Hash::make('admin'),
                'confirmed'   => 1,
                'confirmation_code' => md5(microtime().Config::get('app.key')),
                'created_at' => new DateTime,
                'updated_at' => new DateTime,
            )
        );

        DB::table('users')->insert( $users );
    }

}
接著執行php artisan db:seed 就會餵資料進去了
使用DB::table('users')->truncate();會使auto_increment的值清空
DB::table('users')->delete();則不會。

//以下是unique跟foreign的用法
$table->unique(array('ad_id','ad_groups_id'));//將這2個鍵共設為unique
$table->foreign('ad_id')->references('id')->on('ads')->onDelete('cascade');//將本表的ad_id參考到ads表的id,當delete的時候。

參考資料來源
http://laravel.com/docs/4.2/migrations

沒有留言:

張貼留言