yii2 gii CRUD 生成器错误 - Class 'Message' 不存在或有语法错误

yii2 gii CRUD Generator error - Class 'Message' does not exist or has syntax error

我正在使用 yii2 advanced 为网站创建一个基本的纯文本私人消息系统。

我正在使用 gii 模型和 CRUD 生成器,但在创建模型后遇到了 CRUD 生成问题 class。我想知道消息 table 上的外键是否有问题,它与用户 table 具有一对多关系(即一个用户可以有很多消息)。

当我尝试 运行 CRUD 生成器时 - 型号 Class- 留言 搜索模型 Class - frontend\models\search\MessageSearch 控制器 Class - frontend\controllers\MessageController

我收到以下 错误-

Class 'Message' does not exist or has syntax error.

消息 class 确实存在并且 语法是 根据我的 IDE.

更正

任何可能导致错误的想法?

生成的消息class如下-

<?php
namespace frontend\models;

use Yii;

/**
* This is the model class for table "message".
*
* @property integer $id
* @property string $title
* @property string $message
* @property integer $from_id
* @property integer $to_id
* @property integer $from_viewed
* @property integer $to_viewed
* @property integer $from_deleted
* @property integer $to_deleted
* @property string $from_vdate
* @property string $to_vdate
* @property string $from_ddate
* @property string $to_ddate
* @property string $created
*
* @property User $to
* @property User $from
*/
class Message extends \yii\db\ActiveRecord
{
/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'message';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['message', 'from_id', 'to_id', 'created'], 'required'],
        [['message'], 'string'],
        [['from_id', 'to_id', 'from_viewed', 'to_viewed', 'from_deleted', 'to_deleted'], 'integer'],
        [['from_vdate', 'to_vdate', 'from_ddate', 'to_ddate', 'created'], 'safe'],
        [['title'], 'string', 'max' => 255]
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'title' => 'Title',
        'message' => 'Message',
        'from_id' => 'From ID',
        'to_id' => 'To ID',
        'from_viewed' => 'From Viewed',
        'to_viewed' => 'To Viewed',
        'from_deleted' => 'From Deleted',
        'to_deleted' => 'To Deleted',
        'from_vdate' => 'From Vdate',
        'to_vdate' => 'To Vdate',
        'from_ddate' => 'From Ddate',
        'to_ddate' => 'To Ddate',
        'created' => 'Created',
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getTo()
{
    return $this->hasOne(User::className(), ['id' => 'to_id']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getFrom()
{
    return $this->hasOne(User::className(), ['id' => 'from_id']);
}
}

tablesql是-

--

-- Table table message

的结构

创建 TABLE 如果不存在 message ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(255) 默认为空, message 文本不为空, from_id int(11) 不为空, to_id int(11) 不为空, from_viewed tinyint(1) NOT NULL DEFAULT '0', to_viewed tinyint(1) NOT NULL DEFAULT '0', from_deleted tinyint(1) NOT NULL DEFAULT '0', to_deleted tinyint(1) NOT NULL DEFAULT '0', from_vdate 日期时间默认为空, to_vdate 日期时间默认为空, from_ddate 日期时间默认为空, to_ddate 日期时间默认为空, created 日期时间不为空, 主键(id), 键 from_id (from_id), 键 to_id (to_id) ) ENGINE=InnoDB 默认字符集=latin1 AUTO_INCREMENT=7 ;

--

-- table message

的约束条件

改变TABLEmessage 添加约束 message_ibfk_2 外键 (to_id) 引用 user (id), 添加约束 message_ibfk_1 外键 (from_id) 引用 user (id);

看看这个 link。你的模型命名空间可能是罪魁祸首。

尝试将您的模型命名空间更改为

use app/models/Message

而且我认为外键与您的问题无关。

在您收到的消息中,语法错误指的是您为 gii 提供的 class 定义中的错误。所以 gii 无法使用 Message 作为定义找到您的模型。

应该是frontend\models\Message.