首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel雄辩的ORM事务

Laravel雄辩的ORM事务
EN

Stack Overflow用户
提问于 2013-02-27 14:33:31
回答 4查看 118.3K关注 0票数 111

虽然我想知道是否有一种简单的方法来使用innoDB以与PDO相同的方式设置MySQL事务,或者我是否必须扩展它才能实现这一点,但雄辩的对象关系映射非常好用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-27 14:44:18

您可以这样做:

代码语言:javascript
复制
DB::transaction(function() {
      //
});

闭包中的所有内容都在一个事务中执行。如果发生异常,将自动回滚。

票数 192
EN

Stack Overflow用户

发布于 2014-02-19 05:19:57

如果你想使用Eloquent,你也可以使用这个

这只是我的项目中的示例代码

代码语言:javascript
复制
        /* 
         * Saving Question
         */
        $question = new Question;
        $questionCategory = new QuestionCategory;

        /*
         * Insert new record for question
         */
        $question->title = $title;
        $question->user_id = Auth::user()->user_id;
        $question->description = $description;
        $question->time_post = date('Y-m-d H:i:s');

        if(Input::has('expiredtime'))
            $question->expired_time = Input::get('expiredtime');

        $questionCategory->category_id = $category;
        $questionCategory->time_added = date('Y-m-d H:i:s');

        DB::transaction(function() use ($question, $questionCategory) {

            $question->save();

            /*
             * insert new record for question category
             */
            $questionCategory->question_id = $question->id;
            $questionCategory->save();
        });
票数 40
EN

Stack Overflow用户

发布于 2015-06-17 20:13:31

如果你想避免闭包,并且乐于使用外观,下面的方法可以让事情变得更好更干净:

代码语言:javascript
复制
try {
    \DB::beginTransaction();

    $user = \Auth::user();
    $user->fill($request->all());
    $user->push();

    \DB::commit();

} catch (Throwable $e) {
    \DB::rollback();
}

如果任何语句失败,commit将永远不会命中,事务也不会处理。

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15105640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档