Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel检查数据库中是否已经存在该值_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

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

Php 使用Laravel检查数据库中是否已经存在该值,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,说明:我有一个网站。我只想跟踪一个可疑的请求,如果需要的话,可能会把它们储存起来。我刚刚开始实现这个特性。我有IP地址的所有记录,但我不知道如何增加他们每次访问的次数-他们访问 目标:在用户每次访问站点时增加访问次数属性 在我的visitors表中,我有一个ip属性 在执行保存和其他逻辑之前,我想先检查现有的第一个,但我只是有点被卡住了 如何使用Laravel检查数据库中是否已经存在该值 对此的任何提示都将不胜感激 我试过了 模型:Visitor.php class Visitor ext

说明:我有一个网站。我只想跟踪一个可疑的请求,如果需要的话,可能会把它们储存起来。我刚刚开始实现这个特性。我有IP地址的所有记录,但我不知道如何增加他们每次访问的次数-他们访问


目标:在用户每次访问站点时增加
访问次数
属性


在我的
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);
    }

}
// 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();

}

控制器: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);
    }

}
// 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();

}
//检查现有的
$validator=Visitor::validator($ip);
如果($validator->fails()){
$ip=Visitor::其中('ip','=',$ip)->firstOrFail();
$id=$ip['attributes']['id'];//访问次数=$visitor->访问次数+1;
$visitor->save();
}
}否则{
$visitor=新访客;
$visitor->ip=$ip;
$visitor->访问次数=$visitor->访问次数+1;
$visitor->save();
}

结果

我一直在

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


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

错误消息有点泄露了它。验证器希望值和规则是两个独立的数组,每个数组都有键表示需要验证的列名。您可以将其用于规则,但不用于正在检查的值。这将修复您的错误:

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

现在在我的模型上试一试。再次感谢您的帮助。Bogdan,您能快速查看一下我的控制器,看看我是否正确地抓取了正确对象的
$id
?我希望我是。如果没有,我可以接受你的一些建议这里的这一行
$id=$ip['attributes']['id']
findOrFail
方法将返回一个
Visitor
模型实例,因此您应该以属性的形式访问列值:
$id=$ip->id。但是您在那里所做的似乎有点多余,因为
Visitor::where('ip','=',$ip)->firstOrFail()
已经包含
Visitor::findOrFail($id)的内容将返回。所以你只需要这个:让它以同样的方式工作。哦,我明白了。我应该这样做。谢谢你的建议。