У меня есть 3 таблицы:Yii 2,0 вида для моделей с внешними ключами
Первая таблица главная таблица TheSims4Pages
. Он имеет первичный ключ с именем id
. Вторая таблица отношение таблица
CREATE TABLE IF NOT EXISTS `TheSims4PagesCategoriesRelations` (
`id` int(11) NOT NULL,
`postId` int(11) NOT NULL,
`catId` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `TheSims4PagesCategoriesRelations`
ADD CONSTRAINT `TheSims4PagesCategoriesRelations_ibfk_2` FOREIGN KEY (`catId`) REFERENCES `TheSims4PagesCategories` (`id`),
ADD CONSTRAINT `TheSims4PagesCategoriesRelations_ibfk_1` FOREIGN KEY (`postId`) REFERENCES `TheSims4Pages` (`id`);
И третья таблица TheSims4PagesCategories
с ПК id
.
В настоящее время у меня есть модели TheSims4Pages:
<?php
namespace app\models\TheSims4;
use Yii;
/**
* This is the model class for table "TheSims4Pages".
*
* @property integer $id
* @property string $pageName
* @property string $pageEditDate
* @property integer $isDraft
* @property integer $authorId
* @property string $pageText
*
* @property SiteUsers $author
* @property TheSims4PagesCategoriesRelations[] $theSims4PagesCategoriesRelations
*/
class TheSims4Pages extends \yii\db\ActiveRecord {
/**
* @inheritdoc
*/
public static function tableName() {
return 'TheSims4Pages';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['pageName', 'authorId', 'pageText'], 'required'],
[['pageEditDate'], 'safe'],
[['isDraft', 'authorId'], 'integer'],
[['pageText'], 'string'],
[['pageName'], 'string', 'max' => 500],
[['authorId'], 'exist', 'skipOnError' => true, 'targetClass' => SiteUsers::className(), 'targetAttribute' => ['authorId' => 'id']],
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'pageName' => 'Page Name',
'pageEditDate' => 'Page Edit Date',
'isDraft' => 'Is Draft',
'authorId' => 'Author ID',
'pageText' => 'Page Text',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getAuthor() {
return $this->hasOne(SiteUsers::className(), ['id' => 'authorId']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTheSims4PagesCategoriesRelations() {
return $this->hasMany(TheSims4PagesCategoriesRelations::className(), ['postId' => 'id']);
}
}
Как сделать вид для TheSims4Pages
с выбора элемента для getTheSims4PagesCategoriesRelations
модели, что-то вроде
echo $form->field($model, 'categoryId')->dropDownList($listData);
Но для отношения таблицы?
То есть, я хочу, чтобы выбрать пункт со всеми категориями из таблицы TheSims4PagesCategories и сохранить множественный выбор категорий в модели
$model = new TheSims4Pages();
Спасибо вам большое!
это не исправить проблемы целостности БД лучшие его может, но он будет выполнять эту работу, иначе вы могли бы использовать транзакции – Ripper
Привет! Большое спасибо! Но почему так сложно, если мои таблицы имеют FK? Например, в шаблоне шаблонов шаблонов thymeleaf.org для многих значений полей я могу написать что-то вроде '
ну, вот как это работает в Yii, отношения читаются только свойство, а не как атрибуты – Ripper