Skip to content

0.15.0

Compare
Choose a tag to compare
@MasterOdin MasterOdin released this 19 Sep 09:27
· 78 commits to 0.x since this release
a1c4ec5

Note: The 2.0.0, 2.0.1, and 2.0.2 tags were created incorrectly, and have been deleted and will be removed from packagist. This release features all of the same features and changes that was in those releases. We are still using 0.x releases as the API is not yet considered stable, as evidenced by the breaking change below.

Breaking Changes

PHP 8.1 / Type declarations

This release requires PHP 8.1 or greater to be installed to use Phinx. As part of this, a number of type declarations were changed throughout Phinx to take advantage of the expanded syntax allowed by PHP 8.1. See #2218 for all the files affected.

For users that overwrite $autoId in their migration class, this will now need a bool type declaration:

public bool $autoId = false;

Foreign Key Handling

In previous versions, Phinx was inconsistent with how it handled foreign keys across the adapters. Per #2212, here is the old and new behaviors:

Currently the behavior looks like this:

MySQL Postgres Sqlite SQL Server
Case-sensitive drop no yes yes no¹
Case-sensitive lookup yes yes no yes¹
Multi-column drop no² yes no³ no²
Drop all column matches yes yes no yes
Column order dependent drop no no no no
Column order dependent lookup yes no no no
Silently drop non-existent by columns no yes no yes
Silently drop non-existent by name no no - no

1) In a case sensitive database the query would produce an error.
2) Generates duplicate drop instructions, one for every key that has any of the given columns.
3) For every column, the first key that starts with that column would be deleted.

With these changes, the new behavior would be as follows:

MySQL Postgres Sqlite SQL Server
Case-sensitive drop no yes¹ no yes¹
Case-sensitive lookup no yes¹ no yes¹
Multi-column drop yes yes yes yes
Drop all column matches yes yes yes yes
Column order dependent drop yes yes yes yes
Column order dependent lookup yes yes yes yes
Silently drop non-existent by columns no no no no
Silently drop non-existent by name no no - no

1) The behavior is independent of whether the database/column is actually case-sensitive.

Features

Docs

New Contributors

Full Changelog: 0.14.0...0.15.0