2

これをLaravel 4で実装するにはどうすればよいですか?

$countryName = DB::only("SELECT f_iptocountry_country_name FROM t_iptocountry WHERE $visitorsIp BETWEEN f_iptocountry_begin_ip_num AND f_iptocountry_end_ip_num");

これは、Laravel 3 を使用したクエリで問題ありません。

誰?

4

1 に答える 1

0

テーブル t_iptocountry に関連するモデル IPToCountry があり、同じ範囲の IP を使用する国が複数ないことが確実であると仮定します。

$country = IPToCountry::where('f_iptocountry_begin_ip_num', '>=', $visitorsIp)
                            ->where('f_iptocountry_end_ip_num', '<=', $visitorsIp)
                            ->first(['f_iptocountry_country_name']);

$countryName = count($country) > 0 ? $country->f_iptocountry_country_name : '';

パフォーマンスが気になりますか?この場合に BETWEEN 句を実際に使用するには、2 つのオプションがあります。はるかに複雑な Laravel 命令のセット (おそらく無名関数を使用する) か、生の query を部分的に使用します

raw を使用すると、次のようになります。

$country = DB::table('t_iptocountry')
                     ->whereRaw("'$visitorsIp' BETWEEN f_iptocountry_begin_ip_num AND f_iptocountry_end_ip_num")
                     ->first(['f_iptocountry_country_name']);

$countryName = count($country) > 0 ? $country->f_iptocountry_country_name : '';
于 2013-06-06T15:28:34.350 に答える