Я создаю базовую систему обмена текстовыми сообщениями только для веб-сайта, использующего yii2 advanced.
Я использую генераторы gii и CRUD, но столкнулся с проблемой с генерацией CRUD после создания класса модели. Мне интересно, может ли быть проблема с внешними ключами в таблице сообщений, которые имеют отношение «один ко многим» к таблице пользователей (т. Е. Один пользователь может иметь много сообщений).
Когда я пытаюсь запустить генератор CRUD с классом модели Class-Message Search Model – frontend \ models \ search \ MessageSearch Controller Class – frontend \ controllers \ MessageController
Я получаю следующую ошибку:
Класс «Сообщение» не существует или имеет синтаксическую ошибку.
Класс Message определенно существует, и синтаксис верен в соответствии с моей IDE.
Любые идеи, которые могут вызывать ошибку?
Сгенерированный класс сообщений выглядит следующим образом:
<?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']); } }
Таблица sql –
--
message
таблицы CREATE TABLE, если NOT EXISTS message
( id
int (11) NOT NULL AUTO_INCREMENT, title
varchar (255) DEFAULT NULL, текст message
NOT NULL, from_id
int (11) NOT NULL, to_id
int (11) NOT NULL, 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
datetime DEFAULT NULL, to_vdate
datetime DEFAULT NULL, from_ddate
datetime DEFAULT NULL, to_ddate
datetime DEFAULT NULL, created
datetime NOT NULL, PRIMARY KEY ( id
), KEY from_id
( from_id
), KEY to_id
( to_id
)) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 7;
–
message
ALTER TABLE message
ADD CONSTRAINT message_ibfk_2
FOREIGN KEY ( to_id
) ССЫЛКИ user
( id
), ADD CONSTRAINT message_ibfk_1
FOREIGN KEY ( from_id
) ССЫЛКИ user
( id
);
В этом сообщении, которое вы получаете, синтаксическая ошибка относится к ошибке в определении класса, которое вы предоставляете для gii. Поэтому gii не может найти вашу модель, используя Message
как определение.
Это должен быть frontend\models\Message
.
Взгляните на эту ссылку. Ваше пространство имен модели может быть злодеем.
Попробуйте изменить пространство имен модели на
use app/models/Message
И я не думаю, что внешние ключи имеют какое-то отношение к вашей проблеме.