Laravel使用varbinary(ip)与where不起作用。

6 浏览
0 Comments

Laravel使用varbinary(ip)与where不起作用。

我正在使用varbinary(16)在数据库中存储IP地址,就像这里描述的那样 https://stackoverflow.com/a/24270808/5717102

为了转换为可读和二进制格式,我使用inet_ntopinet_pton

这个方法很有效,但在where查询中不起作用。

MyModel::where('ip', $ip)->get();

我错过了什么,它不应该起作用吗?我已经搜索过了,但没有找到有用的信息。

0
0 Comments

问题原因:Laravel在没有提供操作符的情况下,默认使用"="操作符进行查询。

解决方法:尝试使用以下代码来解决问题:

MyModel::where('ip', '=', $ip)->get();

这样做并没有产生任何区别,因为Laravel默认使用"="操作符进行查询。

0
0 Comments

问题出现的原因是:在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字段进行查询。

0