active-record icon indicating copy to clipboard operation
active-record copied to clipboard

Case insensitive keys for relation models

Open onmotion opened this issue 6 years ago • 1 comments

What steps will reproduce the problem?

 $dataProvider = new ActiveDataProvider([
            'query' => $query->joinWith(['someCaseInsensitiveRelation']),
        ]);

What is the expected result?

So If I make request without dataProvider, I have got all related models:

2018-11-29_16-44-17

What do you get instead?

but if I using dataProvider related models will be empty

2018-11-29_16-39-51

Additional info

It's happens because model keys case sensitive. For example I using Postgres citext or for MySQL (for utf8) my on condition case insensitive (luke = Luke).

I suggest add optional feature for this. May be useCaseInsensitiveKeys = false or something else? It might looks like:

//vendor/yiisoft/yii2/db/ActiveRelationTrait.php

    private function normalizeModelKey($value)
    {
        if (is_object($value) && method_exists($value, '__toString')) {
            // ensure matching to special objects, which are convertable to string, for cross-DBMS relations, for example: `|MongoId`
            $value = $value->__toString();
        }

        return $this->useCaseInsensitiveKeys ? strtolower($value) : $value;
    }

any suggestions?

Q A
Yii version 2.0.15.1
PHP version 7.0.2
Operating system MacOs 12.4

related to #9077

onmotion avatar Nov 29 '18 14:11 onmotion

Won't be done in 2.0 but could be considered for 3.0.

samdark avatar Dec 01 '18 21:12 samdark