CakePHP: множественные отношения к одной модели с HABTM - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть 3 таблицы: users, estruturas и estruturas_users.Estruturas с этими полями: id, name, user_id и hasAndBelongsToMany Users.

Модель пользователя:

class User extends AppModel {
    var $name = 'User';
    var $hasAndBelongsToMany = array(
        'Estrutura' => array(
            'className' => 'Estrutura',
            'joinTable' => 'estruturas_users',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'estrutura_id',
            'unique' => true
        )
    );
}

Модель Estruturas:

class Estrutura extends AppModel {
    var $name = 'Estrutura';

    var $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );


    var $hasAndBelongsToMany = array(
        'User' => array(
            'className' => 'User',
            'joinTable' => 'estruturas_users',
            'foreignKey' => 'estrutura_id',
            'associationForeignKey' => 'user_id',
            'unique' => true
        )
    );
}

Контроллер Estruturas:

function edit($id = null) {
    $this->layout = 'admin';
    if (!$id && empty($this->data)) {
        $this->Session->setFlash(__('Invalid estrutura', true));
        $this->redirect(array('action' => 'admin'));
    }
    if (!empty($this->data)) {
        if ($this->Estrutura->save($this->data)) {
            $this->Session->setFlash(__('The estrutura has been saved', true));
            $this->redirect(array('action' => 'admin'));
        } else {
            $this->Session->setFlash(__('The estrutura could not be saved. Please, try again.', true));
        }
    }
    if (empty($this->data)) {
        $this->data = $this->Estrutura->read(null, $id);
    }
    $users = $this->Estrutura->User->find('list');
    $anos = $this->Estrutura->Ano->find('list');
    $estruturatipos = $this->Estrutura->Estruturatipo->find('list');
    $ciclos = $this->Estrutura->Ciclo->find('list');
    $users = $this->Estrutura->User->find('list');
    $this->set(compact('users', 'anos', 'estruturatipos', 'ciclos', 'users'));
}

В моем представлении редактирования у меня есть эта ошибка: Примечание (8): Смещение неинициализированной строки: 0 [CORE / cake / libs / view / helper.php, строка 863] с:

<?php
    echo $this->Form->input('id');
    echo $this->Form->input('nome');
    echo $this->Form->input('nome_completo');
    echo $this->Form->input('user_id');
    echo $this->Form->input('ano_id');
    echo $this->Form->input('estruturatipo_id');
    echo $this->Form->input('ciclo_id');
    echo $this->Form->input('User'); //the error is here
?>

Что я не так понял?Спасибо

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Проблема в том, что переменная $ принадлежит.Я изменил User на User1 и убедился, что ошибка в модели.В моем user.php у меня есть виртуальные поля, и проблема с ним.Я должен изменить на:

function __construct($id = false, $table = null, $ds = null) {
    parent::__construct($id, $table, $ds);
    $this->virtualFields['nomeUser'] = sprintf('CONCAT(%s.nome, " ", %s.apelido)', $this->alias, $this->alias);
}

var $displayField = 'nomeUser';

С помощью $ this-> alias проблема решается.

Спасибо!

0 голосов
/ 26 апреля 2011

Я не вижу поля User в вашей базе данных. Возможно, вам нужно удалить echo $this->Form->input('User'); и переместить его в верхнюю часть формы следующим образом:

echo $this->Form->create('User');
...