Laravel 查询在 IPv4 和 IPv4 上的行为不同。 IPv6环境

Laravel Query behave differently on IPv4 Vs. IPv6 Environment

我在使用 Laravel 时遇到了以前从未见过的奇怪情况。 我在不同的设置上有相同的代码库,1 个在 IPv4 VM 中,1 个在 IPv6 VM 中。

这是数据库中的数据。

我平时是这样查询的

// $ap = '102030405067';
$gw = Gateway::where('cpe_mac','=',$ap)->first();
dd($gw);

在我的 IPv4 设置中,我得到:

{#541 ▼
  +"id": 1
  +"account_id": "50"
  +"cpe_mac": "102030405067"
  +"gw_id": "1956692524588882"
  +"gw_secret": "zUIyaQfCntob2thL6uR4uQfBvmlCei-5q_oVSJnyeSc"
  +"fb_wifi_enable": "1"
  +"created_at": "2017-10-10 14:41:17"
  +"updated_at": "2017-10-10 14:41:17"
}

在我的 IPv6 设置中,我得到:

null


尝试#2

dd(Gateway::all());

结果

在 IPv4 中,我得到了所有返回的记录。

在 IPv6 中,我得到了这个空集合

Collection {#542 \u25bc #items: [] }


最令人困惑的部分是,其他 table 似乎工作正常,这个 gateways 似乎是唯一导致问题的。

我三次检查了我的 Gateway 型号名称和 table 名称。他们拼写正确。


说实话 - 我认为这不可能。

确保在这两种情况下 $ap 包含完全相同的值。您可以使用 trim($ap) 以防万一,以确保它不包含额外的特殊字符。

还要确保在两个虚拟机上的数据库中有相同的数据。现在似乎在一个 VM 中您在数据库中有数据,而在第二个中却没有。

编辑

Laravel不可能有直接问题,所以:

  • 确保在两个虚拟机中你的数据库中都有数据 - 在两个虚拟机上 运行 SELECT * FROM gateways 验证你有任何记录(你没有提到两个虚拟机都使用相同的数据库所以我假设它们是不同的)
  • 确保在两个虚拟机中您的 .env 文件中都设置了有效的数据库
  • 在两个 VMS 上 运行 php artisan config:clear 只是为了确保您没有缓存无效的数据库连接

什么是 IP 地址?什么是IPv6、IPv4协议,它们有什么区别?

什么是IP地址?

IP(互联网协议)是将数据从一台计算机发送到互联网上另一台设备的协议。互联网上的每台计算机都有不同的 IP 地址,以区别于互联网上的所有其他计算机。 IP 地址是网络上计算机或设备的数字地址和标识符。每个设备都有一个用于通信目的的 IP 地址。

Internet 协议版本 4 (IPv4)

Internet 协议版本 4 (IPv4) 是 Internet 协议 (IP) 的第四个版本。该协议目前最常用于通过不同类型的网络进行数据通信,因为它支持所有设备。1970 年发明的 IPv4。

Internet 协议版本 6 (IPv6)

Internet 协议版本 6 (IPv6) 是 Internet 的最新更新版本协议。这为计算机提供了一个识别和定位系统,并在互联网上路由流量。 IPv6于1998年发明。

IPv4 与 IPv6 之间的区别

IPv4

1.IPv4是32位地址。 2.IPv4为编号地址方式

IPv6

1.IPv6是128位地址。 2.IPv6是字母数字地址法

欲了解更多信息click,请点击此处