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"
    ]
  ]
]