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