File: /var/www/admin.fixgini.com/app/Livewire/Country/Cities.php
<?php
namespace App\Livewire\Country;
use App\Models\City;
use App\Models\State;
use Livewire\Component;
use Livewire\WithPagination;
class Cities extends Component
{
use WithPagination;
public $name;
public $state_id;
public $country_id;
public function changeCityStatus($stateId, $status)
{
if (!in_array($status, ['active', 'inactive'])) {
session()->flash('error', 'Invalid status.');
return $this->redirect(request()->header('Referer'), navigate: true);
}
$state = City::find($stateId);
if ($state) {
$state->status = $status;
$state->save();
session()->flash('success', 'State status updated successfully');
return $this->redirect(request()->header('Referer'), navigate: true);
} else {
session()->flash('error', 'State not found.');
return $this->redirect(request()->header('Referer'), navigate: true);
}
}
public function saveCity()
{
$this->validate([
'name' => 'required|unique:cities,name',
'state_id' => 'required|exists:states,id'
], [
'state_id' => 'The state is required.',
'name' => 'The city name is required.'
]);
// Find the country_id associated with the given state_id
$state = State::find($this->state_id);
if (!$state) {
session()->flash('error', 'Invalid state selected.');
return $this->redirect(request()->header('Referer'), navigate: true);
}
$this->country_id = $state->country_id;
City::create([
'name' => $this->name,
'state_id' => $this->state_id,
'country_id' => $this->country_id,
]);
$this->addError('name', 'City added');
$this->reset();
$this->resetErrorBag();
}
public function deleteCity($cityId)
{
$state = City::find($cityId);
if ($state) {
$state->delete();
session()->flash('success', 'City deleted successfully');
return $this->redirect(request()->header('Referer'), navigate: true);
} else {
session()->flash('error', 'state not found');
return $this->redirect(request()->header('Referer'), navigate: true);
}
}
public function render()
{
// Fetch paginated states
$cities = City::latest()->paginate();
// Fetch all countries
$states = State::all();
// Pass data to the view
return view('livewire.country.cities', compact('cities', 'states'));
}
}