From 4430b04f11c8ecceffb0a00c4099b84da9c32f46 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Thu, 24 Aug 2023 17:58:33 +0300 Subject: [PATCH] Add UserAddress model. --- app/Models/City.php | 6 +++ app/Models/User.php | 6 +++ app/Models/UserAddress.php | 39 ++++++++++++++++ database/factories/UserAddressFactory.php | 23 ++++++++++ ..._24_141639_create_user_addresses_table.php | 44 +++++++++++++++++++ database/seeders/UserAddressSeeder.php | 17 +++++++ 6 files changed, 135 insertions(+) create mode 100644 app/Models/UserAddress.php create mode 100644 database/factories/UserAddressFactory.php create mode 100644 database/migrations/2023_08_24_141639_create_user_addresses_table.php create mode 100644 database/seeders/UserAddressSeeder.php diff --git a/app/Models/City.php b/app/Models/City.php index ce6ced7..43f8990 100644 --- a/app/Models/City.php +++ b/app/Models/City.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; use App\Models\Validation\ValidationByNameInterface; use App\Models\Company; @@ -24,6 +25,11 @@ class City extends Model implements ValidationByNameInterface return $this->belongsToMany(Company::class, 'cities_companies', 'city_id', 'company_id'); } + public function userAddresses(): HasMany + { + return $this->hasMany(UserAddress::class); + } + public function getCompanyIds(): array { return $this->companies()->pluck('company_id')->toArray(); diff --git a/app/Models/User.php b/app/Models/User.php index 19a424b..f8c3d8a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; +use Illuminate\Database\Eloquent\Relations\HasMany; use App\Models\Validation\ValidationByNameInterface; @@ -39,4 +40,9 @@ class User extends Authenticatable implements ValidationByNameInterface { return $name != ''; } + + public function userAddresses(): HasMany + { + return $this->hasMany(UserAddress::class); + } } diff --git a/app/Models/UserAddress.php b/app/Models/UserAddress.php new file mode 100644 index 0000000..05ff818 --- /dev/null +++ b/app/Models/UserAddress.php @@ -0,0 +1,39 @@ + + */ + protected $fillable = [ + 'title', + 'type', + 'street', + 'house', + 'flat', + 'stage', + 'note', + 'city_id', + 'user_id', + ]; + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function city(): BelongsTo + { + return $this->belongsTo(City::class); + } +} diff --git a/database/factories/UserAddressFactory.php b/database/factories/UserAddressFactory.php new file mode 100644 index 0000000..f7739ba --- /dev/null +++ b/database/factories/UserAddressFactory.php @@ -0,0 +1,23 @@ + + */ +class UserAddressFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/database/migrations/2023_08_24_141639_create_user_addresses_table.php b/database/migrations/2023_08_24_141639_create_user_addresses_table.php new file mode 100644 index 0000000..3eae925 --- /dev/null +++ b/database/migrations/2023_08_24_141639_create_user_addresses_table.php @@ -0,0 +1,44 @@ +id(); + $table->string('title', 100); + $table->smallInteger('type')->default(0); + $table->string('street', 255); + $table->string('house', 10)->nullable(); + $table->string('flat', 10)->nullable(); + $table->string('stage', 10)->nullable(); + $table->string('note', 100); + + $table->unsignedBiginteger('city_id')->unsigned(); + $table->unsignedBiginteger('user_id')->unsigned(); + + $table->foreign('city_id')->references('id') + ->on('cities')->onDelete('cascade'); + + $table->foreign('user_id')->references('id') + ->on('users')->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_addresses'); + } +}; diff --git a/database/seeders/UserAddressSeeder.php b/database/seeders/UserAddressSeeder.php new file mode 100644 index 0000000..8c1a927 --- /dev/null +++ b/database/seeders/UserAddressSeeder.php @@ -0,0 +1,17 @@ +