#cakephp-1.3 #has-and-belongs-to-many
#cakephp-1.3 #имеет и принадлежит многим
Вопрос:
У меня есть 3 таблицы: users, estruturas и estruturas_users. Настройки с этими полями: id, name, user_id и имеет и принадлежит множеству пользователей.
Пользовательская модель:
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
)
);
}
Встроенный контроллер:
function edit($id = null) {
$this->layout = 'admin';
if (!$id amp;amp; 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
?>
Что у меня не так?
Спасибо
Комментарии:
1. Первая проблема, которую я вижу, заключается в том, что вы используете две связи с одинаковым именем. Вам не нужно использовать имя другой модели в отношении, которое вы связываете с атрибутом className.
Ответ №1:
Я не вижу пользовательского поля в вашей базе данных. Возможно, то, что вы ищете, — это удалить echo $this->Form->input('User');
и переместить его в начало вашей формы вот так:
echo $this->Form->create('User');
Ответ №2:
Проблема в переменной $ belongsTo. Я изменил 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 проблема решена.
Спасибо!