关于Laravel增删改查的几点疑问

问题1

$user = new User();
$user->name = 'xiaoming';
$user->sex = 1;
$user->save();

关于save方法是不是执行了insert和select

问题2

try {
    DB::transaction(function() {
        $re = User::where('id', 1)->update(['sex' => 2]);
        if (!$re) {
            throw new \Exception('充值失败');
        }
    });
catch (\Exception $e) {
    //错误处理
}

事务中需要手动判断是否保存成功了吗?

问题3

$user = User::find(1);
$user->increment('number');
$user->increment('money', 10);

请问这里是执行了几条SQL

让PHP再次伟大
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

问题2:不需要手动判断, 如果是 DB::beginTransaction(); ... 需要手动判断

问题1,问题3。授人以鱼不如授人以渔 博客:简单实现Laravel获取当前执行的SQL

2年前 评论
Adachi (作者) 2年前
讨论数量: 2

问题2:不需要手动判断, 如果是 DB::beginTransaction(); ... 需要手动判断

问题1,问题3。授人以鱼不如授人以渔 博客:简单实现Laravel获取当前执行的SQL

2年前 评论
Adachi (作者) 2年前
陈先生
<?php

namespace App\Providers;

use DateTime;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;

class DatabaseListener extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     */
    public function boot()
    {
        //
        if (env('APP_DEBUG', false)) {
            DB::listen(
                function ($sql) {
                    foreach ($sql->bindings as $i => $binding) {
                        if ($binding instanceof DateTime) {
                            $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
                        } else {
                            if (is_string($binding)) {
                                $sql->bindings[$i] = "'$binding'";
                            }
                        }
                    }
                    $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);
                    $query = vsprintf($query, $sql->bindings);
                    $log_file = fopen(
                        storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . 'sql.log'),
                        'a+'
                    );
                    fwrite($log_file, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL);
                    fclose($log_file);
                }
            );
        }
    }
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!