确保不存在的变量不会破坏代码

时间:2019-02-11 09:59:11

标签: php laravel

我正在数据库中搜索一个代码,如果找到了它,那么我将在同时更改两个记录的状态并保存它们之后搜索与该代码相关的结果。

问题很基本,我不确定如何验证这些变量以确保它们为空时不破坏任何内容。我确定这个if语句可以完成工作,但似乎不会。

$code = self::where('h_id', '=', $id)->first();

if($code) {
    $outcome = Outcome::where('code_id', '', $code->id)->first();
}

if($outcome) {
    $code->status = 1;
    $outcome->status = 1;
    $code->save();
    $outcome->save();
}

3 个答案:

答案 0 :(得分:3)

使用empty

$code = self::where('h_id', '=', $id)->first();

if(empty($code)) die(); // handle error however you like

$outcome = Outcome::where('code_id', '', $code->id)->first();

if(empty($outcome)) die(); // handle error however you like

$code->status = 1;
$outcome->status = 1;
$code->save();
$outcome->save();

您可以使用die终止脚本,分配默认值,或者根据最终目标进行完全不同的操作。

答案 1 :(得分:1)

显式方法是检查雄辩的数据库请求是否返回null,因为如果找不到给定的参数,Laravel返回null

如果您正在检查x = y,则也无需指定第二个参数。

if($code) {
    $outcome = Outcome::where('code_id', $code->id)->first();
}

结局后,您只需检查

if($outcome !== null) {
    $code->status = 1;
    $outcome->status = 1;
    $code->save();
    $outcome->save();
}

如果变量不等于null,则找到具有特定参数的给定模型。

希望这会有所帮助。

答案 2 :(得分:-1)

我认为您的模型是一对一的关系。如果是这样,您可以尝试以下代码

$data = self::with(['outcome'])->whereHas('outcome')->where('h_id', '=', $id)->first();

if($data){
$data->status = 1;
data->outcome->status = 1;
$data->save();
data->outcome->save();}