Yii Many_Many Отношения и Форма - PullRequest
1 голос
/ 25 декабря 2010
// Post model
return array(
    'categories' => array(self::MANY_MANY, 'Category', 'categories_posts(post_id, category_id)')
);

У меня уже есть настройка таблиц

posts
id, title, content

categories
id, name

categories_posts
post_id, category_i

Проблема в том, что я получаю сообщение об ошибке при создании этой формы:

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'post-form',
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'title'); ?>
        <?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'title'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'uri'); ?>
        <?php echo $form->textField($model,'uri',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'uri'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'content'); ?>
        <?php echo $form->textArea($model,'content',array('rows'=>6, 'cols'=>50)); ?>
        <?php echo $form->error($model,'content'); ?>
    </div>

    <div class="row">
        <?php // echo $form->labelEx($model,'content'); ?>
        <?php echo CHtml::activeDropDownList($model,'category_id', CHtml::listData(Category::model()->findAll(), 'id', 'name')); ?>
        <?php // echo $form->error($model,'content'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

Ошибка:

Property "Post.category_id" is not defined.

Я совершенно сбит с толку. Что я должен сделать, чтобы исправить это?

Ответы [ 3 ]

3 голосов
/ 28 декабря 2010

Я использую CAdvancedArBehavior, чтобы сделать это проще. Я не удивлюсь, если что-то подобное в конце концов попадет в ядро ​​Yii:

http://www.yiiframework.com/extension/cadvancedarbehavior/

Позволяет написать код в вашем контроллере:

$model->categories = $_POST['Post']['categories'];

Я использую это с виджетом / расширением "Relation", более "глючным, чем я бы хотел". Возможно, вам придется использовать это для правильной структуры переменных POST, я не уверен.

2 голосов
/ 25 декабря 2010

Я, честно говоря, думал, что Yii в любом случае имеет что-то вроде Kohana или Cake. Я думаю, мне нужно добавить их вручную.

foreach ($_POST['category_id'] as $category_id)
{
    $categoryPost = new CategoryPost;
    $categoryPost->category_id = $category_id;
    $categoryPost->post_id = $model->id;
    $categoryPost->save();
}
1 голос
/ 13 апреля 2011

Используйте таким образом: В контроллере создайте объект для категории: $modelCat= new Category;, затем в

<?php echo CHtml::activeDropDownList(**$modelCat**,'category_id', CHtml::listData(Category::model()->findAll(), 'id', 'name')); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...