Cakephp:如何使用迁移插入记录
Posted
技术标签:
【中文标题】Cakephp:如何使用迁移插入记录【英文标题】:Cakephp: How to use migration to insert records 【发布时间】:2015-06-08 15:13:17 【问题描述】:我正在使用 Cakephp v3.x,我正在尝试弄清楚如何通过迁移工具插入一些记录。 The documentation 只列出了修改模式的方法。我需要使用原始 SQL 手动插入记录吗?
【问题讨论】:
【参考方案1】:CakePHP 3 的 Migration 插件是一个 Phinx 包装器插件,因此可以使用 up()
方法添加记录:-
public function up()
// Save records to the newly created schema
public function down()
// Remove records
例如,您可以在up
上使用TableRegistry
添加新用户:-
public function up()
// Save records to the newly created schema
$UsersTable = TableRegistry::get('Users');
$user = $UsersTable->newEntity();
$user->name = 'Joe Bloggs';
$user->email = 'joe@example.com';
$UsersTable->save($user);
如果使用TableRegistry
,请不要忘记在迁移文件的顶部包含use Cake\ORM\TableRegistry;
。
对于 CakeDC 的迁移插件,您可以在相关迁移文件中使用 callbacks 插入记录:-
public function after($direction)
if ($direction === 'up')
// Save records to the newly created schema
elseif ($direction === 'down')
// Remove records
注意:如果您使用的是 Postgres 驱动程序,则当前有一个 bug,需要一个小的解决方法才能使其正常工作。
【讨论】:
CakePHp 3.x 附带了自己的迁移插件 (github.com/cakephp/migrations),它是一个 Phinx 包装器,您确定这适用于这里吗? 我的错,我喜欢使用 CakeDC 的插件。我已经更新了我的答案,以展示如何使用默认插件来做到这一点。 kk,只是不确定,因为我还没有使用迁移插件。我认为应该注意的是,在这种情况下确实必须use raw SQL,因为似乎没有插入(包装器)方法。 github.com/robmorgan/phinx/issues/96 嗯,这可能是真的……我稍后会试一试,然后再继续传播潜在的虚假信息:) 貌似前段时间添加了insert()
方法,然而现在是not documented github.com/robmorgan/phinx/pull/457以上是关于Cakephp:如何使用迁移插入记录的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?