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 克隆/复制 sql 记录?

是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?

CakePHP 使用 saveAll:如何使用 HABTM 链接记录保存额外数据?

Cakephp 3测试:如何从数据库加载记录?

CakePHP:当有多个关联记录时如何指定返回字段

cakephp3 如何检查实体是不是是新插入的 afterSave 回调?