private function removeDuplicatedModels($models)
    {
        $hash = [];
        /* @var $class ActiveRecordInterface */
        $class = $this->modelClass;
        $pks = $class::primaryKey();

        if (count($pks) > 1) {
            // composite primary key
            foreach ($models as $i => $model) {
                $key = [];
                foreach ($pks as $pk) {
                    if (!isset($model[$pk])) {
                        // do not continue if the primary key is not part of the result set
                        break 2;
                    }
                    $key[] = $model[$pk];
                }
                $key = serialize($key);
                if (isset($hash[$key])) {
                    unset($models[$i]);
                } else {
                    $hash[$key] = true;
                }
            }
        } elseif (empty($pks)) {
            throw new InvalidConfigException("Primary key of '{$class}' can not be empty.");
        } else {
            // single column primary key
            $pk = reset($pks);
            foreach ($models as $i => $model) {
                if (!isset($model[$pk])) {
                    // do not continue if the primary key is not part of the result set
                    break;
                }
                $key = $model[$pk];
                if (isset($hash[$key])) {
                    unset($models[$i]);
                } elseif ($key !== null) {
                    $hash[$key] = true;
                }
            }
        }

        return array_values($models);
    }
private function removeDuplicatedModels($models)
    {
        $hash = [];
        /* @var $class ActiveRecordInterface */
        $class = $this->modelClass;
        $pks = $class::primaryKey();

        if (count($pks) > 1) {
            // composite primary key
            foreach ($models as $i => $model) {
                $key = [];
                foreach ($pks as $pk) {
                    if (!isset($model[$pk])) {
                        // do not continue if the primary key is not part of the result set
                        break 2;
                    }
                    $key[] = $model[$pk];
                }
                $key = serialize($key);
                if (isset($hash[$key])) {
                    unset($models[$i]);
                } else {
                    $hash[$key] = true;
                }
            }
        } elseif (empty($pks)) {
            throw new InvalidConfigException("Primary key of '{$class}' can not be empty.");
        } else {
            // single column primary key
            $pk = reset($pks);
            foreach ($models as $i => $model) {
                if (!isset($model[$pk])) {
                    // do not continue if the primary key is not part of the result set
                    break;
                }
                $key = $model[$pk];
                if (isset($hash[$key])) {
                    unset($models[$i]);
                } elseif ($key !== null) {
                    $hash[$key] = true;
                }
            }
        }

        return array_values($models);
    }
private function removeDuplicatedModels ( $ models ) { $ hash = [ ] ; /* @var $class ActiveRecordInterface */ $ class = $ this -> modelClass ; $ pks = $ class :: primaryKey ( ) ; if ( count ( $ pks ) > 1 ) { // composite primary key foreach ( $ models as $ i => $ model ) { $ key = [ ] ; foreach ( $ pks as $ pk ) { if ( ! isset ( $ model [ $ pk ] ) ) { // do not continue if the primary key is not part of the result set break 2 ; } $ key [ ] = $ model [ $ pk ] ; } $ key = serialize ( $ key ) ; if ( isset ( $ hash [ $ key ] ) ) { unset ( $ models [ $ i ] ) ; } else { $ hash [ $ key ] = true ; } } } elseif ( empty ( $ pks ) ) { throw new InvalidConfigException ( "Primary key of '{$class}' can not be empty." ) ; } else { // single column primary key $ pk = reset ( $ pks ) ; foreach ( $ models as $ i => $ model ) { if ( ! isset ( $ model [ $ pk ] ) ) { // do not continue if the primary key is not part of the result set break ; } $ key = $ model [ $ pk ] ; if ( isset ( $ hash [ $ key ] ) ) { unset ( $ models [ $ i ] ) ; } elseif ( $ key !== null ) { $ hash [ $ key ] = true ; } } } return array_values ( $ models ) ; }
Removes duplicated models by checking their primary key values.
This method is mainly called when a join query is performed, which may cause duplicated rows being returned.
@param array $models the models to be checked
@throws InvalidConfigException if model primary key is empty
@return array|ActiveRecordInterface[] the distinctive models
Removes duplicated models by checking their primary key values . This method is mainly called when a join query is performed which may cause duplicated rows being returned .