2012-03-13 4 views
2

По какой-то причине, когда я делаю вставку mysql db из Zend, моя строка дублируется. Я пробовал прямую вставку через phpmyadmin, и она отлично работает, поэтому это не проблема сервера mysql.Zend дублирует строки на вставке mysql

Это код, я использую:

<?php 

class Model_Team extends Zend_Db_Table_Abstract { 

    protected $_name = 'team'; 

    public function createUser($data) { 
     $user = $this->createRow(); 
     $user->name = $data['name']; 
     $user->title = $data['title']; 
     $id = $user->save(); 
     return $id; 
    } 
} 

?> 

Спасибо заранее.

EDIT:

Я обнаружил, что это дублирование происходит только тогда, когда я называю форму через AJAX (модальные окна), хотя форма пост является нормальным, а не запрос Ajax)

+0

Чтобы убедиться: 1. Вы просмотрели вкладку в сети «Инструменты разработчика Firebug/Chrome», чтобы проверить, отправлено ли сообщение только один раз? 2. Вы проверяли, что метод createUser вызывается только один раз в вашем приложении? – arraintxo

ответ

1

Я не знаю, почему ваш код дважды накачивает базу данных при сохранении, но это не имеет значения, поскольку вы используете объект Row и сохраняете(). (save() вставки или обновления)
Возможно, вы захотите реструктурировать функцию createUser(), чтобы она не могла создать новую строку, если строка уже существует.

<?php 

class Model_Team extends Zend_Db_Table_Abstract { 

protected $_name = 'team'; 

public function createUser(array $data) { 

    $user = $this->createRow(); 
    //test if user has id in the array 
    if (array_key_exists('id', $data)){ 
     $user->id = $data['id']; 
    } 
    $user->name = $data['name']; 
    $user->title = $data['title']; 
    $user->save(); 
    //no need to create a new variable to return the user row 
    return $user; 
    } 
} 

Этот метод будет создавать и обновлять строку пользователя.

Чтобы помочь вам дальше, мне нужно будет увидеть код контроллера, в котором большинство моих двойных насосов произошло.

+0

Невозможно все время, если есть автоматическое приращение. – kta

0

Вместо использования createRow() Вы пробовали использовать insert()?

/** 
* Insert array of data as new row into database 
* @param array $data associative array of column => value pairs. 
* @return int Primary Key of inserted row 
*/ 
public function createUser($data) 
{ 
    return $this->insert($data); 
} 

Также - можно ли увидеть код ajax? Может быть, форма также отправляется?

+0

Использование $ this-> insert() также дублирует запись. Я использую плагин jQuery для facebox для обработки модального окна. – MGP

Смежные вопросы