laravel / framework

The Laravel Framework.
https://laravel.com
MIT License
32.62k stars 11.03k forks source link

[11.x] Use getQualifiedOwnerKeyName in relations #53573

Closed willtj closed 2 days ago

willtj commented 2 days ago

This is another attempt at my change in #53559, to use the existing getQualifiedOwnerKeyName() method rather than assuming the format of table.column. As @crynobone noticed, that change revealed that the current code can end up passing a null value to str_contains(), which is deprecated.

I've added a null check to getQualifiedOwnerKeyName() so we don't attempt to qualify a null column. In the example of one of the tests that was throwing the deprecation notice (DatabaseEloquentIntegrationTest::testEmptyMorphToRelationship) this means that in practice the where query being added changes from $this->query->where('photos.', ...) to $this->query->where('', ...). The 'add constraints' methods could be updated to handle null values differently, but I'm hoping the change I have here should be the minimum required to fix the issue properly with the lowest risk to other areas.