используя транзакции в CakePHP - PullRequest
0 голосов
/ 15 января 2011

У меня есть две таблицы в базе данных, и когда я добавляю продукт, мне нужно вставить в обе таблицы.Я думаю, что мне нужно использовать транзакции, но поскольку я нахожусь на стадии изучения CakePHP, SQL и т. Д. ... Я застрял.

Это мои таблицы

products(id, name, description, price)  
images(id, path, alt, product_id)

и метод в модели продукта выглядит следующим образом:

    function newProduct($product, $image){
    if(!empty($product) && !empty($image)){
        $dataSource = $this->getDataSource();
        $dataSource->begin($this);
        if($this->save($product)){
            ClassRegistry::init('Image');
            $Image = new Image();
            $Image->product_id = $this->id; 
                //I'm stuck here, how to save ??
            return  $dataSource->commit($this);
        }
        $dataSource->rollback($this);
    }

    return false;
   }

1 Ответ

0 голосов
/ 16 января 2011

Существует транзакционное поведение для CakePHP 1.2 +:

http://bakery.cakephp.org/articles/Jippi/2007/01/29/transaction_behavior

Cake также имеет метод saveAll.Просто укажите обе записи в одном массиве и вызовите saveAll:

$savearrary = array("Model1" => ..., "Model2" => ...);
$this->Model->saveAll($savearray);

(Если вы добавите Image в массив $uses (например, = var $uses = array("Image", "Product");), вам не нужно будет создавать объект Image.Модель изображения будет доступна по адресу $ this-> Image)

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