Fruer
Fruer

Reputation: 3

Phalcon Migration - How to do migration for federated table?

I tried to do migration for federated table. Here's how my migration file looks like for the federated table:

<?php

use Phalcon\Db\Column;
use Phalcon\Db\Index;
use Phalcon\Di;
use Phalcon\Migrations\Migration;

class DBIAgentMigration_926 extends Migration
{
    public function up()
    {
        $di = Di::getDefault();

        // Check if the table already exists
        if (!$di->getShared('dbi')->tableExists('Agent')) {
            $this->createAgentTable();
        }
    }

    public function down()
    {
        $di = Di::getDefault();

        // Check if the table exists before attempting to drop it
        if ($di->getShared('dbi')->tableExists('Agent')) {
            $di->getShared('dbi')->dropTable('Agent');
        }
    }

    private function createAgentTable()
    {
        $di = Di::getDefault();

        $di->getShared('dbi')->createTable(
            'Agent',
            null,
            [
                'columns' => [
                    new Column(
                        'Id',
                        [
                            'type'          => Column::TYPE_BIGINTEGER,
                            'notNull'       => true,
                            'autoIncrement' => true,
                        ]
                    ),
                    new Column(
                        'Code',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 25,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'Name',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 150,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'Description',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 500,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'RemoteId',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 250,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'Enabled',
                        [
                            'type'    => Column::TYPE_TINYINTEGER,
                            'notNull' => true,
                            'default' => 1,
                        ]
                    ),
                    new Column(
                        'TypeId',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 15,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'StatusId',
                        [
                            'type'     => Column::TYPE_VARCHAR,
                            'size'     => 15,
                            'notNull'  => false,
                            'default'  => null,
                        ]
                    ),
                    new Column(
                        'Remarks',
                        [
                            'type'    => Column::TYPE_TEXT,
                            'notNull' => false,
                            'default' => null,
                        ]
                    ),
                    new Column(
                        'SiteId',
                        [
                            'type'    => Column::TYPE_BIGINTEGER,
                            'notNull' => true,
                        ]
                    ),
                    new Column(
                        'Modifier',
                        [
                            'type'    => Column::TYPE_VARCHAR,
                            'size'    => 25,
                            'notNull' => true,
                        ]
                    ),
                    new Column(
                        'ModifyDate',
                        [
                            'type'    => Column::TYPE_DATETIME,
                            'notNull' => false,
                            'default' => null,
                        ]
                    ),
                    new Column(
                        'Options',
                        [
                            'type'    => Column::TYPE_TEXT,
                            'notNull' => false,
                            'default' => null,
                        ]
                    ),
                ],
                'indexes' => [
                    new Index('PRIMARY', ['Id'], 'PRIMARY'),
                    new Index('TypeId', ['TypeId']),
                    new Index('StatusId', ['StatusId']),
                    new Index('SiteId', ['SiteId']),
                ],
                'options' => [
                    'ENGINE' => 'FEDERATED',
                    'charset' => 'utf8mb3',
                    'connection' => 'federated_main/Agent',
                ],
            ]
        );
    }
}

But when I tried to run it, I got this error:

Fatal Error: SQLSTATE[HY000]: General error: 1432 server name: '' doesn't exist!

I am really confused, because I have already created a server for it:

SELECT * FROM mysql.servers where Server_name = 'federated_main';
Server_name, Host, Db, Username, Password, Port, Socket, Wrapper, Owner
'federated_main', '127.0.0.1', 'main_db', '(username)', '(password)', '3306', '', 'mysql', ''

How to fix this problem?

I'm using:

Upvotes: 0

Views: 20

Answers (0)

Related Questions