PHP 致命错误"yii\base\ErrorException",消息"找不到类'模型名称'



我尝试从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 &#039;yiibaseErrorException&#039; with message &#039;Class &#039;ModelName&#039; not found&#039; 
in C:xampphtdocskampunginggrispare.comcommonmodelsHelper.php:61
Stack trace:
#0 [internal function]: yiibaseErrorHandler-&gt;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自动加载器。

最新更新