我尝试从yii1迁移到yii2。当我仍然使用yii1时,我有一些模型函数,其中包括生成ID uniq函数,例如:
public static function generateID($tableName, $modelName) {
$dateNow = date("Ymd");
$checkLastID = $modelName::findBySql(
"SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'"
)->one();
$lastNumber = (int)substr($checkLastID["id"], 8,4);
if($checkLastID["id"] == '') {
$id = $dateNow.sprintf("%04s", 1);
} else {
$lastNumber = $checkLastID["id"];
$lastNumber++;
if($lastNumber < 10) $id = $dateNow.sprintf("%04s", $lastNumber);
elseif($lastNumber < 100) $id = $dateNow.sprintf("%04s", $lastNumber);
elseif($lastNumber < 1000) $id = $dateNow.sprintf("%04s", $lastNumber);
elseif($lastNumber < 10000) $id = $dateNow.sprintf("%04s", $lastNumber);
else $id = $lastNumber;
}
return $id;
}
我从这样的控制器访问函数:
$model->id = Helper::generateID('table_name', 'ModelName');
而不是在我想要创建数据时显示错误:
<pre>PHP Fatal Error 'yiibaseErrorException' with message 'Class 'ModelName' not found'
in C:xampphtdocskampunginggrispare.comcommonmodelsHelper.php:61
Stack trace:
#0 [internal function]: yiibaseErrorHandler->handleFatalError()
#1 {main}</pre>
但是,如果我更改
$checkLastID = $modelName::findBySql("SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'")->one();
是:
$checkLastID = ModelName::findBySql("SELECT SUBSTR(MAX(id),-4) AS id FROM table_name WHERE id LIKE '%$dateNow%'")->one();
这是工作的
在yii1中,不是错误,而是yii2中的错误
任何身体都可以帮助我??
谢谢...
在在Helper
类中使用之前,请尝试加载$ ModelName。您可以
...
$dateNow = date("Ymd");
$className = 'commonmodels\' . $modelName; // replace this with your model's namespace
$checkLastID = $className::findBySql(
"SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'"
)->one();
....
或简单地将您的助手放在$ModelName
的同一命名空间中(不推荐)。我仍然不了解您的Helper
类的目的。
yii2找不到 ModelName
class。
请阅读有关升级的更多信息:从版本1.1升级:名称空间和YII2自动加载器。