Я работаю над приложением рецензирования книг и использую автозаполнение для поиска названий при создании рецензии.Модель рецензирования имеет связанное поле book_id, и связь устанавливается, поскольку рецензия имеет одну книгу, а книга имеет много рецензий.
Я пытаюсь передать Book.id (в поле book_id), но хочуотобразить Book.name для выбора пользователем.При настройке по умолчанию (выполненной с помощью учебника CakePHP) я могу передать только Book.name.Можно ли отобразить имя и передать идентификатор?
Кроме того, я передаю его через следующий код в действии create () контроллера обзора:
$this->data['Review']['book_id'] = $this->data['Book']['id'];
Этоправильный способ сделать это в CakePHP?Я знаю, что в Ruby on Rails это происходит автоматически, но я не могу заставить его работать автоматически в CakePHP.Наконец, я не использую генератор, потому что он недоступен в моей среде общего хостинга ... поэтому, если это неправильный путь, что мне нужно, кроме партнеров в моих моделях, чтобы это произошло автоматически?
Спасибо за помощь, и я обещаю, что это мой вопрос на некоторое время ...
ОБНОВЛЕНИЕ - Я попробовал следующее, но это не работает.Есть идеи, почему?
function autoComplete() {
$this->set('books', $this->Book->find('all', array(
'conditions' => array(
'Book.name LIKE' => $this->data['Book']['name'].'%'
),
'fields' => array('id','name')
)));
$this->layout = 'ajax';
}
Проблема в том, что, когда я использую код выше в контроллере, форма отправляет, но не сохраняет запись ... Не выдается никаких ошибок, чтостранно.
ОБНОВЛЕНИЕ2:
Я определил, что причина, по которой это не работает, заключается в том, что типы массивов разные, и вы не можете изменить тип массива с помощью помощника autoComplete.В качестве обходного пути я попытался выполнить следующее, но оно не работает.Кто-нибудь может предложить руководство почему?
function create() {
if($this->Review->create($this->data) && $this->Review->validates()) {
$this->data['Review']['user_id'] = $this->Session->read('Auth.User.id');
$this->Book->find('first', array('fields' => array('Book.id'), 'conditions' => array('Book.name' => $this->data['Book']['name'])));
$this->data['Review']['book_id'] = $this->Book->id;
$this->Review->save($this->data);
$this->redirect(array('action' => 'index'));
} else {
$errors = $this->Review->invalidFields();
}
}
FINAL UPDATE:
Хорошо, я обнаружил, что помощник принимает только тип или массив find (all) и что поле "id" былоt, потому что он применяется только к генерируемому списку LI автозаполнения.Таким образом, я использовал поле visibleField для получения информации, а затем выполнил поиск в базе данных и попытался создать скрытое поле на лету с идентификатором, но это не сработало.В конце концов ,ааааааааааааааа я, чтобы в поле «Наблюдение» были введены только те символы, которые я вставил, а не те, на которые я нажал, из-за очевидного ограничения Писанием.Итак, я закончил тем, что сейчас выбрал выпадающее окно и, возможно, в конечном итоге займусь чем-то другим.В любом случае, спасибо за помощь!