我的查询插入了吗?

时间:2014-08-12 15:15:59

标签: laravel laravel-4 eloquent

关于我之前提出的问题,我还有一个问题:

Was my query successful?

我正在执行插入查询,我想知道它是否成功。

我尝试过以下方法:

    $input = Input::all();

    $user = User::firstOrNew(array('email' => $input['email']));
    $user->name = $input['name'];
    $user->username = $input['username'];
    $user->email = $input['email'];
    $user->password = Hash::make($input['password']);

    $user->save();

    if($user){
        var_dump('all good');
    }
    else
    {
        var_dump('fail!');
    }
    die();

我修改上面代码的部分内容以使其失败,例如。更改模型名称或数据库字段。但这只会导致代码输出查询异常。

如何检查此查询是否失败,是否需要尝试/捕获?还是有更好的方法?

3 个答案:

答案 0 :(得分:0)

您需要使用try / catch块:

try
{
    $user->save();
}
catch(Exception $e)
{
    // Your code when query fails. 
}

当您的应用为公众做好准备时,请不要忘记打开文件app/config/app.php并将debugtrue更改为false。这将阻止您的应用在您没有尝试/捕获阻止的情况下输出查询异常。

答案 1 :(得分:0)

save返回布尔值,所以简单地说:

if ($model->save()) // YAY success!
else // unexpected, but no errrors

当然如果有任何错误,这会导致db查询或php代码失败,那么你会看到异常。

例如,当您挂钩else事件并停止时,可能会发生saving

// User model
public static function boot()
{
  static::saving(function ($user) {

    // Not a girl? You shall NOT PASS! ;)
    if ($model->gender != 'female') return false;
  });
}

答案 2 :(得分:0)

使用Try / Catch可能成为最佳解决方案之一。 例如:

public function InsertDummies($data1,$data2,$data3){
        try{
            //your query
            return 'Success to Insert';
        }
        catch(Exception $e){
            return 'Failed to Insert';
        }
}
祝你好运!