#php #mysql #cakephp #cakephp-model
#php #mysql #cakephp #cakephp-модель
Вопрос:
Я создаю контроллер сообщений, который позволяет пользователю отправлять сообщения другим пользователям. Вот моя структура базы данных
Пользователи
id
username
password
Сообщения
id
to_id
from_id
subject
message
to_id и from_id оба ссылаются на столбец id в users . Вот моя модель для сообщений
Сообщение
<?php
class Message extends AppModel {
var $name = 'Message';
var $displayField = 'subject';
var $validate = array(
'id' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'to_id' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
'allowEmpty' => false,
'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'from_id' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
'allowEmpty' => false,
'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
);
var $belongsTo = array(
'Sender' => array(
'className' => 'User',
'foreignKey' => 'to_id'
),
'Recipient' => array(
'className' => 'User',
'foreignKey' => 'from_id'
)
);
}
Тогда вот мое мнение
<div class="messages form">
<?php echo $this->Form->create('Message');?>
<fieldset>
<legend><?php __('Add Message'); ?></legend>
<?php
echo $this->Form->input('to_id');
echo $this->Form->input('from_id');
echo $this->Form->input('subject');
echo $this->Form->input('message');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>
<div class="actions">
<h3><?php __('Actions'); ?></h3>
<ul>
<li><?php echo $this->Html->link(__('List Messages', true), array('action' => 'index'));?></li>
</ul>
</div>
Он отображает выпадающий список, но в нем нет пользователей. У меня есть по крайней мере 5 пользователей в таблице users
даже если я добавлю префикс следующим образом
echo $this->Form->input('Sender.to_id');
echo $this->Form->input('Recipient.from_id');
по-прежнему не работает
Ответ №1:
Как указано Марком, это не сработает, если вы не придерживаетесь соглашения. Переименуйте foreignkeys, Sender => sender_id, Recipient => recipient_id
Сначала вы должны создать списки в контроллере
в контроллере сообщений
$senders = $this->Message->Sender->find('list');
$recipients = $this->Message->Recipient->find('list');
$this->set(compact('senders', 'recipients'));
Затем в представлении
echo $this->Form->input('recipient_id');
echo $this->Form->input('sender_id');
Комментарии:
1. ваш ответ немного неверен — $fromsи $tosбудут автоматически заполнять поля выбора. в противном случае вам понадобится руководство ‘options’=> $senders и т. д
2. Я не могу протестировать его сейчас, но нет, он должен работать так из-за ассоциаций
3. Я согласен, следует изменить foreignkeys на sender_id и recipient_id, еще одна причина придерживаться соглашений