搞了几天rails了,太magic了。所以搞不清楚,只知道调用。
今天深入去了解了下 create_table 大家给指点指点
先请看流程:
再看 SchemaStatement 类的create_table()代码
ruby 代码
-
-
-
-
-
-
-
-
-
-
-
-
- def create_table(table_name, options = {})
- table_definition = TableDefinition.new(self)
- table_definition.primary_key(options[:primary_key] || "id") unless options[:id] == false
-
- yield table_definition
-
- if options[:force]
- drop_table(table_name, options) rescue nil
- end
-
- create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
- create_sql << "#{quote_table_name(table_name)} ("
- create_sql << table_definition.to_sql
- create_sql << ") #{options[:options]}"
- execute create_sql
- end
大家明白了吧。
根据传递的参数,一步一步来创建 create_sql, 然后execute来执行。
字段的组合是用
yield table_definition
具体可以去跟踪 TableDefinition 类(schema_definitions.rb 文件里面, path: gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract )
通过这个跟踪,知道了很多东西,不错。
现在也了解选项:force是什么意思。
也了解了 some_method *args do |something|
end
这种书写方法的意思。 do .... end就是 some_method 里面的yield
分享到:
- 2007-12-21 11:17
- 浏览 1595
- 评论(2)
- 论坛回复 / 浏览 (2 / 3154)
- 查看更多
相关推荐
$this->createTable('{{%page_template}}', [ 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'content' => $this->text()->notNull(), 'created_at' => $this->integer()->notNull(), ...
捆绑执行rake db:create_migration NAME = create_words_table_again 建立表格 def change create_table:lines做| t | t.integer:line_number结束 或修改现有表 def change rename_column :songs, :numer_of_...
HasArrayOf ... # db/migrate/20141027125227_create_playlist.rb class CreatePlaylist < ActiveRecord :: Migration def change create_table :playlists do | t | t . integer :video_ids , a
migrate -path ./db/migrations create add_field_to_table migrate -url postgres://user@host:port/database -path ./db/migrations -timeout 10 up migrate -url postgres://user@host:port/database -path ./db/...
定义一个名为change的方法,并在该方法中使用Active Record create_table方法创建表。 该表应具有带string类型的:name列。 完成定义change方法后,通过在终端中运行rake db:migrate来运行rake db:migrate 。 添加...
定义一个名为change的方法,并在该方法中使用Active Record create_table方法创建表。 该表应具有带string类型的:name列。 完成定义change方法后,通过在终端中运行rake db:migrate来运行rake db:migrate 。添加列...
在 Laravel 框架中,`laravel_migrate` 是一个关键的概念,它与数据库迁移密切相关。数据库迁移是 Laravel 提供的一种版本控制系统,允许开发者在不同的开发环境中对数据库结构进行同步,确保团队成员都能拥有相同的...
定义一个名为change的方法,并在该方法中使用Active Record create_table方法创建表。 该表应具有带string类型的:name列。 完成定义change方法后,通过在终端中运行rake db:migrate来运行rake db:migrate 。 添加...
定义一个名为change的方法,并在该方法中使用Active Record create_table方法创建表。 该表应具有带string类型的:name列。 完成定义change方法后,通过在终端中运行rake db:migrate来运行rake db:migrate 。 添加...
例如,版本迁移的文件名为`V1.2__create_test_table.sql`,其中`V`是版本迁移的前缀,`1.2`是版本号,`create_test_table`是描述,`.sql`是后缀。 在SpringBoot项目中集成Flyway非常简便。首先,添加Flyway的依赖到...
php artisan migrate:make create_authors_table ``` 这将在 app/database/migrations 目录下生成一个新的迁移文件,名为 2014_03_11_162133_create_authors_table.php。 在这个迁移文件中,我们需要定义两个方法:...
建立数据表 php artisan make:migration create_tasks_table --create=tasks 把表写入数据库 php artisan migrate 在生产环境中强制运行迁移,没有提示 php artisan migrate --force
2. **命名规范**:为迁移文件提供清晰的命名,如 `create_users_table.php`,以便了解其功能。 3. **测试环境**:在开发过程中,先在测试环境中运行迁移,确保无误后再部署到生产环境。 4. **数据库设计**:遵循良好...
`php artisan migrate:make create_authors_table` 这将在 app/database/migrations 目录下创建一个名为 2014_03_11_162133_create_authors_table.php 的文件。 迁移文件的解剖 迁移文件继承自 Illuminate\...
使用`php artisan migrate:make create_resulttable`命令,可以创建一个新迁移文件,用于创建名为`resulttable`的表。这个文件将包含两个方法:`up`和`down`。`up`方法用于执行数据库变更,而`down`方法则用于回滚...
database migrations 是laravel最强大的功能之一。数据库迁移可以理解为数据库的版本控制器。 在 database/migrations 目录中包含两个迁移文件...Migrated: 2014_10_12_000000_create_users_table Migrated: 2014_10_1
本文就详细的介绍了关于Laravel中migrate使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 生成迁移 命令: Migration php artisan make:migration create_users_table 意思:...
在Laravel中,我们使用`php artisan make:migration create_table_name`命令创建一个新的迁移文件,然后在该文件中定义数据库表的结构。 例如,创建一个`users`表的迁移文件,可以运行以下命令: ``` ...
Schema::create('oauth_clients', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('secret', 100)->nullable(); $table->unsignedInteger('user_id')->nullable(); $table->...