Laravel使用varbinary(ip)与where不起作用。
Laravel使用varbinary(ip)与where不起作用。
我正在使用varbinary(16)在数据库中存储IP地址,就像这里描述的那样 https://stackoverflow.com/a/24270808/5717102。
为了转换为可读和二进制格式,我使用inet_ntop
和inet_pton
。
这个方法很有效,但在where查询中不起作用。
MyModel::where('ip', $ip)->get();
我错过了什么,它不应该起作用吗?我已经搜索过了,但没有找到有用的信息。
问题出现的原因是:在Laravel中,varbinary类型的字段在使用where条件查询时无法正常工作。
解决方法是:使用inet_pton函数将IP地址转换为二进制格式,并在查询中使用该函数。
具体的解决方法如下:
1. 直接在查询中使用inet_pton函数:
MyModel::where('ip', inet_pton($ip))->get();
2. 创建一个作用域,并将逻辑移动到模型中,以便在查询中使用:
public function scopeWhereIp($query, $ip) { return $query->where('ip', inet_pton($ip)); }
然后可以这样访问:
MyModel::whereIp($ip)->get();
通过以上方法,我们可以在Laravel中正确地使用varbinary字段进行查询。