CakePHP, создающий новую запись, всегда имеет идентификатор 1 и перезаписывает существующие - PullRequest
0 голосов
/ 10 сентября 2011

Я создал приложение CakePHP для создания встреч с клиентами, и каждый раз, когда я пытаюсь создать встречу для клиента, она всегда перезаписывает любую существующую встречу с тем же идентификатором 1. Идентификатор установлен на AI в базе данных, поэтому он долженавтоинкремент, но это не так.

Вот мое действие контроллера:

function admin_add($client_id)
{
    $this->set('client_id', $client_id);

    $this->set('client', $this->Appointment->Client->find('first', array('conditions' => array('Client.id' => $client_id))));

    $this->set('doctors', $this->Appointment->Doctor->find(
      'list',
      array(
        'fields' => array('Doctor.name'),
        'order' => array('Doctor.firstname', 'Doctor.lastname')
      )
    ));

    if (!empty($this->data))
    {
        if ($this->Appointment->save($this->data))
        {
            $this->Session->setFlash('Your post has been saved.');
            $this->redirect(array('admin' => true, 'controller' => 'appointments', 'action' => 'index'));
        }
    }
}

, и это моя модель:

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

    var $useTable = 'appointments';

    var $belongsTo = array('Client','Doctor');
}

и, наконец, мой вид для формы:

<h1>Book Appointment <em>for</em> <?php echo $client['Client']['firstname'] . " " . $client['Client']['lastname']; ?></h1>

<?php echo $this->Form->create('Appointment', array('url' => array('admin'=>true,'controller'=>'appointments','action'=>'add',$client_id))); ?>

<fieldset id="post-form">
    <ul>
        <li>
            <?php echo $this->Form->input('client_id',array('type'=>'hidden','value'=>$client_id)); ?>

            <?php echo $this->Form->input('doctor_id',array('label'=>'<strong>Choose Doctor</strong>'),$doctors); ?>
        </li>
        <li>
            <?php echo $this->Form->input('datetime',array('label'=>'<strong>Date and Time</strong>')); ?>
        </li>
        <li>
            <?php echo $this->Form->input('treatment',array('label'=>'<strong>Treatment</strong>')); ?>
        </li>
        <li class="sep clearfix">
            <input class="submit" type="submit" name="submit" value="Book Appointment" />
            <?php echo $this->Html->link('Cancel',array('admin'=>true,'controller'=>'clients','action'=>'view',$client_id)); ?>
        </li>
    </ul>
</fieldset>

<?php echo $this->Form->end(); ?>

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

потому что у вас есть client_id в вашей Form-> create (), поэтому форма меняется с add на edit. Это один из раздражающих автоматов Cake. Вы можете просто сбросить это поле id перед сохранением ($ this-> data)

0 голосов
/ 10 сентября 2011

Добавление этого к представлению устраняет проблему:

<?php echo $this->Form->input('id', array('type' => 'hidden')); ?>

но зачем мне это делать? Очевидно, что база данных была в состоянии заполнить поле целым числом, которое просто не увеличивалось автоматически: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...