cakephp / phinx

PHP Database Migrations for Everyone
https://phinx.org
MIT License
4.46k stars 892 forks source link

Drop table doesn't work as expected #2211

Open algorhythm opened 1 year ago

algorhythm commented 1 year ago

The documentation says to use the following code when deleting a table:

$this->table('table')->drop()->save();

https://book.cakephp.org/phinx/0/en/migrations.html#dropping-a-table

But in my opinion it's better using:

$this->table('table')->drop()->update();

...because if the table doesn't exists and when executing Table::executeActions(), the actions will contain DropTable and a dynamically added CreateTable action. That makes no sense.

This is due to the following code:

/**
 * Executes all the pending actions for this table
 *
 * @param bool $exists Whether or not the table existed prior to executing this method
 * @return void
 */
protected function executeActions(bool $exists): void
{
    /* ... */

    // If the table does not exist, the last command in the chain needs to be
    // a CreateTable action.
    if (! $exists) {
        $this->actions->addAction(new CreateTable($this->table));
    }

    /* ... */
}

https://github.com/cakephp/phinx/blob/b2eef811863e6c4e96bac0136263f502424a170f/src/Phinx/Db/Table.php#L716

So am I using the save and update methods in a wrong way and then the documentation needs to be changed or is it a bug?