使用Laravel检查数据库中是否已存在该值

时间:2015-10-10 14:56:09

标签: php laravel laravel-5 eloquent

说明:我有一个网站。我只是想跟踪一个可疑的请求,并且只在需要时才可能将它们谷仓。我刚刚开始实现该功能。我有IP地址的所有记录,但我不确定如何每次增加他们的访问次数 - 他们访问。

目标:每次用户访问网站时增加visit_count属性

在我的visitors表格中,我有一个ip属性 我想先查看现有的,我执行保存和其他逻辑,但我只是有点卡在这里。

如何使用Laravel检查数据库中是否已存在该值?

对此的任何提示都将非常感谢!

我已经尝试了

型号:Visitor.php

class Visitor extends Model {

    protected $table = 'visitors';


    //Validation Rules and Validator Function
    public static function validator($input, $id = ''){

        $rules = array(

            'ip'    =>'unique:visitors,ip,'.$id,

            );

        return Validator::make($input,$rules);
    }

}

控制器:Visitor.php

// Check for existing
$validator = Visitor::validator($ip);

if ($validator->fails()) {

    $ip = Visitor::where('ip', '=', $ip)->firstOrFail();
    $id =  $ip['attributes']['id']; //<------ Not sure if this is a proper way

    if($ip){

        $visitor              = Visitor::findOrFail($id);
        $visitor->visit_count = $visitor->visit_count + 1 ;
        $visitor->save();

    }

} else {

    $visitor              = new Visitor;

        $visitor->ip             = $ip;
        $visitor->visit_count    = $visitor->visit_count + 1 ;

    $visitor->save();

}

结果

我一直在

  

传递给Illuminate \ Validation \ Factory :: make()的参数1必须是数组类型,给定字符串

我相信,这一行来自$validator = Visitor::validator($ip);

1 个答案:

答案 0 :(得分:2)

错误消息类型将其丢弃。 Validator期望值和规则是两个独立的数组,每个数组都带有表示需要验证的列名的键。你有规则,但不是被检查的值。这将解决您的错误:

return Validator::make(['ip' => $input], $rules);