diff --git a/Model.php b/Model.php index 2cc0f41..1b19a05 100644 --- a/Model.php +++ b/Model.php @@ -266,13 +266,13 @@ class Model extends Base\Model /** - * @param ModelInterface|string $modelName + * @param string $modelName * @param string $foreignKey * @param string $localKey * @return string * @throws Exception */ - private function _hasBase(ModelInterface|string $modelName, string $foreignKey, string $localKey): string + private function _hasBase(string $modelName, string $foreignKey, string $localKey): string { if (($value = $this->{$localKey}) === null) { throw new Exception("Need join table primary key."); @@ -280,7 +280,7 @@ class Model extends Base\Model $relation = $this->getRelation(); - $primaryKey = $modelName . $foreignKey . $value; + $primaryKey = str_replace('\\\\', '_', $modelName) . '_' . $foreignKey . '_' . $value; if (!$relation->hasIdentification($primaryKey)) { $relation->bindIdentification($primaryKey, $modelName::query()->where([$foreignKey => $value])); } @@ -289,51 +289,51 @@ class Model extends Base\Model /** - * @param ModelInterface|string $modelName + * @param string $modelName * @param string $foreignKey * @param string $localKey * @return HasOne|ActiveQuery * @throws Exception */ - public function hasOne(ModelInterface|string $modelName, string $foreignKey, string $localKey): HasOne|ActiveQuery + public function hasOne(string $modelName, string $foreignKey, string $localKey): HasOne|ActiveQuery { return new HasOne($this->_hasBase($modelName, $foreignKey, $localKey)); } /** - * @param ModelInterface|string $modelName + * @param string $modelName * @param string $foreignKey * @param string $localKey * @return ActiveQuery|HasCount * @throws Exception */ - public function hasCount(ModelInterface|string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasCount + public function hasCount(string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasCount { return new HasCount($this->_hasBase($modelName, $foreignKey, $localKey)); } /** - * @param ModelInterface|string $modelName + * @param string $modelName * @param string $foreignKey * @param string $localKey * @return ActiveQuery|HasMany * @throws Exception */ - public function hasMany(ModelInterface|string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasMany + public function hasMany(string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasMany { return new HasMany($this->_hasBase($modelName, $foreignKey, $localKey)); } /** - * @param ModelInterface|string $modelName + * @param string $modelName * @param string $foreignKey * @param string $localKey * @return ActiveQuery|HasMany * @throws Exception */ - public function hasIn(ModelInterface|string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasMany + public function hasIn(string $modelName, string $foreignKey, string $localKey): ActiveQuery|HasMany { if (($value = $this->{$localKey}) === null) { throw new Exception("Need join table primary key."); @@ -341,7 +341,7 @@ class Model extends Base\Model $relation = $this->getRelation(); - $primaryKey = $modelName . $foreignKey . json_encode($value, JSON_UNESCAPED_UNICODE); + $primaryKey = str_replace('\\\\', '_', $modelName) . '_' . $foreignKey . '_' . implode('_', $value); if (!$relation->hasIdentification($primaryKey)) { $relation->bindIdentification($primaryKey, $modelName::query()->whereIn($foreignKey, $value)); }