说明:我有一个网站.我只是想跟踪一个可疑的请求,并且只在需要时才可能将它们谷仓.我刚刚开始实现该功能.我有IP地址的所有记录,但我不确定如何每次增加他们的访问次数 – 他们访问.
目标:每次用户访问网站时增加visit_count属性
在我的访问者表中,我有一个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();
}
结果
我一直在
Argument 1 passed to Illuminate\Validation\Factory::make() must be of the type array, string given
我相信,它来自这一行$validator = Visitor :: validator($ip);
最佳答案 错误消息类型给它. Validator期望值和规则是两个独立的数组,每个数组都带有表示需要验证的列名的键.你有规则,但不是被检查的值.这将解决您的错误:
return Validator::make(['ip' => $input], $rules);