App\Models\City {#1011 // app/Services/CityTopicService.php:90 #connection: "mysql" #table: "cities" #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] +preventsLazyLoading: false #perPage: 15 +exists: true +wasRecentlyCreated: false #escapeWhenCastingToString: false #attributes: array:26 [ "id" => 10014 "geonames_id" => "2968515" "name" => "Villeneuve-sur-Lot" "ascii_name" => "Villeneuve-sur-Lot" "alternate_names" => "["Vil'nev-sjur-Lo","Vil'nev-sjur-Lot","Vil'njov-sjur-Lo","Vilanueva dAgen","Vilanueva dOlt","Vilanu\u00e8va dAgen","Vilanu\u00e8va d\u00d2lt","Villanova ad Oltem","Villeneuve","Villeneuve-sur-Lot","Vilnev sir Lot","bilnoebeuswileuloteu","luo te he pan xin cheng","vuirunuvu=shuru=rotto","wilneifw-sur-lxt","wy nw swrlw","\u0412\u0438\u043b\u043d\u0435\u0432 \u0441\u0438\u0440 \u041b\u043e\u0442","\u0412\u0438\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e","\u0412\u0438\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e\u0442","\u0412\u0438\u043b\u044c\u043d\u0451\u0432-\u0441\u044e\u0440-\u041b\u043e","\u0412\u0456\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e\u0442","\u0648\u06cc \u0646\u0648 \u0633\u0648\u0631\u0644\u0648","\u0e27\u0e35\u0e25\u0e40\u0e19\u0e34\u0e1f\u0e27\u0e4c-\u0e0b\u0e39\u0e23\u0e4c-\u0e25\u0e47\u0e2d\u0e15","\u30f4\u30a3\u30eb\u30cc\u30fc\u30f4\uff1d\u30b7\u30e5\u30eb\uff1d\u30ed\u30c3\u30c8","\u6d1b\u7279\u6cb3\u7554\u65b0\u57ce","\ube4c\ub1cc\ube0c\uc26c\ub974\ub85c\ud2b8"]" "latitude" => "44.4085400" "longitude" => "0.7041500" "feature_class" => "P" "feature_code" => "PPLA3" "country_id" => 74 "country_code" => "FR" "admin1_code" => "75" "admin2_code" => "47" "admin3_code" => "473" "admin4_code" => "47323" "population" => 25869 "elevation" => null "dem" => 56 "timezone_id" => "Europe/Paris" "modification_date" => "2016-02-18 07:00:00" "slug" => "villeneuve-sur-lot-fr" "ai_seasonal_topics" => null "is_featured" => 0 "is_active" => 1 "created_at" => "2025-08-12 13:31:55" "updated_at" => "2025-08-12 13:31:55" ] #original: array:26 [ "id" => 10014 "geonames_id" => "2968515" "name" => "Villeneuve-sur-Lot" "ascii_name" => "Villeneuve-sur-Lot" "alternate_names" => "["Vil'nev-sjur-Lo","Vil'nev-sjur-Lot","Vil'njov-sjur-Lo","Vilanueva dAgen","Vilanueva dOlt","Vilanu\u00e8va dAgen","Vilanu\u00e8va d\u00d2lt","Villanova ad Oltem","Villeneuve","Villeneuve-sur-Lot","Vilnev sir Lot","bilnoebeuswileuloteu","luo te he pan xin cheng","vuirunuvu=shuru=rotto","wilneifw-sur-lxt","wy nw swrlw","\u0412\u0438\u043b\u043d\u0435\u0432 \u0441\u0438\u0440 \u041b\u043e\u0442","\u0412\u0438\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e","\u0412\u0438\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e\u0442","\u0412\u0438\u043b\u044c\u043d\u0451\u0432-\u0441\u044e\u0440-\u041b\u043e","\u0412\u0456\u043b\u044c\u043d\u0435\u0432-\u0441\u044e\u0440-\u041b\u043e\u0442","\u0648\u06cc \u0646\u0648 \u0633\u0648\u0631\u0644\u0648","\u0e27\u0e35\u0e25\u0e40\u0e19\u0e34\u0e1f\u0e27\u0e4c-\u0e0b\u0e39\u0e23\u0e4c-\u0e25\u0e47\u0e2d\u0e15","\u30f4\u30a3\u30eb\u30cc\u30fc\u30f4\uff1d\u30b7\u30e5\u30eb\uff1d\u30ed\u30c3\u30c8","\u6d1b\u7279\u6cb3\u7554\u65b0\u57ce","\ube4c\ub1cc\ube0c\uc26c\ub974\ub85c\ud2b8"]" "latitude" => "44.4085400" "longitude" => "0.7041500" "feature_class" => "P" "feature_code" => "PPLA3" "country_id" => 74 "country_code" => "FR" "admin1_code" => "75" "admin2_code" => "47" "admin3_code" => "473" "admin4_code" => "47323" "population" => 25869 "elevation" => null "dem" => 56 "timezone_id" => "Europe/Paris" "modification_date" => "2016-02-18 07:00:00" "slug" => "villeneuve-sur-lot-fr" "ai_seasonal_topics" => null "is_featured" => 0 "is_active" => 1 "created_at" => "2025-08-12 13:31:55" "updated_at" => "2025-08-12 13:31:55" ] #changes: [] #previous: [] #casts: array:10 [ "alternate_names" => "array" "latitude" => "decimal:7" "longitude" => "decimal:7" "population" => "integer" "elevation" => "integer" "dem" => "integer" "modification_date" => "datetime" "is_featured" => "boolean" "is_active" => "boolean" "ai_seasonal_topics" => "array" ] #classCastCache: [] #attributeCastCache: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: array:2 [ "country" => App\Models\Country {#1431 #connection: "mysql" #table: "countries" #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] +preventsLazyLoading: false #perPage: 15 +exists: true +wasRecentlyCreated: false #escapeWhenCastingToString: false #attributes: array:20 [ "id" => 74 "name" => "France" "iso_code" => "FR" "iso3_code" => "FRA" "numeric_code" => "250" "fips_code" => "FR" "capital" => "Paris" "area_km2" => "547030.00" "population" => 66987244 "continent" => "EU" "currency_code" => "EUR" "languages" => "fr-FR,frp,br,co,ca,eu,oc" "phone_prefix" => "33" "postal_code_format" => "Euro" "postal_code_regex" => "3017382" "neighbors" => "["CH","DE","BE","LU","IT","AD","MC","ES"]" "flag_emoji" => "🇫🇷" "is_active" => 1 "created_at" => "2025-08-12 13:31:39" "updated_at" => "2025-08-12 13:31:39" ] #original: array:20 [ "id" => 74 "name" => "France" "iso_code" => "FR" "iso3_code" => "FRA" "numeric_code" => "250" "fips_code" => "FR" "capital" => "Paris" "area_km2" => "547030.00" "population" => 66987244 "continent" => "EU" "currency_code" => "EUR" "languages" => "fr-FR,frp,br,co,ca,eu,oc" "phone_prefix" => "33" "postal_code_format" => "Euro" "postal_code_regex" => "3017382" "neighbors" => "["CH","DE","BE","LU","IT","AD","MC","ES"]" "flag_emoji" => "🇫🇷" "is_active" => 1 "created_at" => "2025-08-12 13:31:39" "updated_at" => "2025-08-12 13:31:39" ] #changes: [] #previous: [] #casts: array:4 [ "neighbors" => "array" "area_km2" => "decimal:2" "population" => "integer" "is_active" => "boolean" ] #classCastCache: [] #attributeCastCache: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: [] #touches: [] #relationAutoloadCallback: null #relationAutoloadContext: null +timestamps: true +usesUniqueIds: false #hidden: [] #visible: [] #fillable: array:17 [ 0 => "name" 1 => "iso_code" 2 => "iso3_code" 3 => "numeric_code" 4 => "fips_code" 5 => "capital" 6 => "area_km2" 7 => "population" 8 => "continent" 9 => "currency_code" 10 => "languages" 11 => "phone_prefix" 12 => "postal_code_format" 13 => "postal_code_regex" 14 => "neighbors" 15 => "flag_emoji" 16 => "is_active" ] #guarded: array:1 [ 0 => "*" ] } "timezone" => App\Models\TimeZone {#1022 #connection: "mysql" #table: "timezones" #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] +preventsLazyLoading: false #perPage: 15 +exists: true +wasRecentlyCreated: false #escapeWhenCastingToString: false #attributes: array:11 [ "id" => 346 "timezone_id" => "Europe/Paris" "country_code" => "FR" "gmt_offset" => "1.00" "dst_offset" => "2.00" "raw_offset" => "1.00" "timezone_name" => "Paris Time" "has_dst" => 1 "created_at" => "2025-08-12 13:31:39" "updated_at" => "2025-08-12 13:31:39" "slug" => "europeparis" ] #original: array:11 [ "id" => 346 "timezone_id" => "Europe/Paris" "country_code" => "FR" "gmt_offset" => "1.00" "dst_offset" => "2.00" "raw_offset" => "1.00" "timezone_name" => "Paris Time" "has_dst" => 1 "created_at" => "2025-08-12 13:31:39" "updated_at" => "2025-08-12 13:31:39" "slug" => "europeparis" ] #changes: [] #previous: [] #casts: array:4 [ "gmt_offset" => "decimal:2" "dst_offset" => "decimal:2" "raw_offset" => "decimal:2" "has_dst" => "boolean" ] #classCastCache: [] #attributeCastCache: [] #dateFormat: null #appends: [] #dispatchesEvents: [] #observables: [] #relations: [] #touches: [] #relationAutoloadCallback: null #relationAutoloadContext: null +timestamps: true +usesUniqueIds: false #hidden: [] #visible: [] #fillable: array:8 [ 0 => "timezone_id" 1 => "country_code" 2 => "gmt_offset" 3 => "dst_offset" 4 => "raw_offset" 5 => "timezone_name" 6 => "has_dst" 7 => "slug" ] #guarded: array:1 [ 0 => "*" ] } ] #touches: [] #relationAutoloadCallback: null #relationAutoloadContext: null +timestamps: true +usesUniqueIds: false #hidden: [] #visible: [] #fillable: array:22 [ 0 => "geonames_id" 1 => "name" 2 => "ascii_name" 3 => "alternate_names" 4 => "latitude" 5 => "longitude" 6 => "feature_class" 7 => "feature_code" 8 => "country_id" 9 => "country_code" 10 => "admin1_code" 11 => "admin2_code" 12 => "admin3_code" 13 => "admin4_code" 14 => "population" 15 => "elevation" 16 => "dem" 17 => "timezone_id" 18 => "modification_date" 19 => "slug" 20 => "is_featured" 21 => "is_active" ] #guarded: array:1 [ 0 => "*" ] }
array:2 [ // app/Services/CityTopicService.php:127 "topic" => "Summer Shopping Essentials for Villeneuve-sur-Lot" "products" => array:2 [ "men" => array:3 [ 0 => "lightweight swim trunks" 1 => "short sleeve linen shirt" 2 => "breathable hiking shorts" ] "women" => array:3 [ 0 => "flowy sundress" 1 => "comfortable sandals" 2 => "wide brim sun hat" ] ] ]