Doctrine DBAL is the most popular relational database abstraction library for PHP. Many developers prefer using a database abstraction since they usually provide a better developer experience than working directly with database drivers. However, despite the best effort of their designers, abstractions often make developers unhappy when it comes to using non-trivial database features. Per Joel Spolsky, "all non-trivial abstractions, to some degree, are leaky". As a quite complex one, Doctrine DBAL leaks in a variety of aspects: drivers, SQL dialects, and schema management specifics. In this talk, I will highlight the most notable inconsistencies of Doctrine DBAL APIs and provide recommendations on dealing with them.


Please login to leave a comment

Impressive details and examples.

Jordan Wamser at 15:16 on 3 Nov 2023

loved the the detail of the presentation, as well as knowing the stats of where current tests are at.

I am currently diving into the code of DBAL itself and have ideas stirring around. and this presentation helped clarify a lot for me.

Precious Smith at 15:19 on 3 Nov 2023

The examples helped a lot! It's easier to understand what is happening with your detailed visuals. Maybe adding a personal example of where you've seen/experienced database abstraction issues would be nice.

Nick A at 20:49 on 3 Nov 2023

This was a great talk by the legendary Sergei Morozov. The technical examples about the problems that Doctrine DBAL has run into and resolved were interesting. I also liked the summary of its duality: DBAL is popular despite its flaws, but it is flawed because it is popular. I also liked the mention of the Tell, Don't Ask principle which should be considered for any integration project

Jim Wigginton at 09:15 on 4 Nov 2023

I don't really use DBALs but it was neat hearing about the challenges of supporting a bunch of different solutions with disparate features. Like I'm sure OmniPay is plagued by the same issues, Flysystem, etc.

Interesting details about the challenges of building a DBAL and making an abstraction over different flavors of databases.

Ryan Marks at 15:43 on 4 Nov 2023

Thanks for your presentation and examples. I'll be sharing this with my team.