Для настройки отношения hasMany между таблицами с разными полями в Yii2, нужно использовать параметр `link` в методе `hasMany()` модели. Например, если у вас есть модели `User` и `Role`, и у них разные поля для связи `user_id` (varchar varying) и `id` (integer) соответственно, нужно указать параметр `link` в методе `hasMany()` следующим образом:
```php
class User extends ActiveRecord
{
public function getRoles()
{
return $this->hasMany(Role::className(), ['user_id' => 'id']);
}
}
```
Таким образом, отношение `User->roles` будет устанавливаться по полю `user_id` из таблицы `Role` и полю `id` из таблицы `User`.
Чтобы изменить метод `getRole` для корректной установки связи LEFT JOIN между таблицами, учитывая различие типов данных поля `user_id` и `id`, можно воспользоваться методом `leftJoin()` запроса. Например:
```php
class User extends ActiveRecord
{
public function getRoles()
{
return $this->hasMany(Role::className(), ['user_id' => 'id']);
}
public function getRole()
{
return $this->hasOne(Role::className(), ['user_id' => 'id'])->leftJoin('user', 'user.id = role.user_id');
}
}
```
Таким образом, вы можете установить связь между таблицами `User` и `Role`, учитывая различие типов данных полей `user_id` и `id`, и избежать ошибку "ERROR: operator does not exist: integer = character varying".