Skip to content

Translations broken on postgresql if using UUIDs #360

Open
@pixelplant

Description

@pixelplant

Describe the bug
After the upgrade to 11.12 (since we need Laravel 10 support) our translations are broken. The main table using translations has an UUID key used for the getTranslationRelationKey(), so imagine having a table called "properties" with an "uuid" primary key and the translations are stored in property_translations.

To Reproduce
Make sure you're using a postgresql DB
Use any eloquent model that has an uuid primary key, let's say it's called Property. Call the translations method on it:

$p = App\Models\Property::first()
$p->translation

and see the following error:

SQLSTATE[42883]: Undefined function: 7 ERROR:  function max(uuid) does not exist
LINE 1: ...\" from \"property_translations\" inner join (select max(\"prope...

Expected behavior
Translations should work as before

Screenshots
If applicable, add screenshots to help explain your problem.

Versions (please complete the following information)

  • PHP: 8.1
  • Database: Postgres 12 or 14
  • Laravel: 10
  • Package: 11.12.1

Additional context
It's linked to the "translation" call in the Relationship.php trait
New code with error calls 'max' on the ofMany relationship

    public function translation(): HasOne
    {
        return $this
            ->hasOne($this->getTranslationModelName(), $this->getTranslationRelationKey())
            ->ofMany([
                $this->getTranslationRelationKey() => 'max',
            ], function (Builder $query): void {
                $query->where($this->getLocaleKey(), $this->localeOrFallback());
            });
    }

Old code which worked did not call max and worked fine

    public function translation(): HasOne
    {
        return $this
            ->hasOne($this->getTranslationModelName(), $this->getTranslationRelationKey())
            ->where($this->getLocaleKey(), $this->localeOrFallback());
    }

Exception

function max(uuid) does not exist
LINE 1: ...\" from \"property_translations\" inner join (select max(\"prope...

Stack Trace
The full stack trace of the thrown exception.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions