Laravel 8 HasOne() Пример

Originally posted @ https://codeanddeploy.com посетите и загрузите код примера:
https://codeanddeploy.com/blog/laravel/laravel-8-hasone-example

В этой заметке я поделюсь с вами примером использования метода Laravel 8 hasOne() в отношениях модели. В моем предыдущем руководстве я рассказал, как реализовать отношения Laravel один-к-одному, которые используются для связи между записями в двух таблицах, где каждая запись в каждой таблице отображается только один раз.

Метод Laravel hasOne() очень полезен при реализации отношений Laravel один-к-одному, который используется для получения связанных записей с помощью динамических свойств Eloquent.

Давайте создадим две таблицы, которые связаны друг с другом. Где таблица пользователя содержит контактную информацию.

Шаг 1: Создаем миграцию для нашего тестирования Laravel hasOne()

В этом примере мы просто создадим миграцию для нашей таблицы user_contact_infos, поскольку мы будем использовать таблицу users по умолчанию.

Выполните следующую команду:

php artisan make:migration create_user_contact_infos_table
Войти в полноэкранный режим Выйти из полноэкранного режима

Ниже приведен полный код:

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateUserContactInfosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('user_contact_infos', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('city');
            $table->string('phone');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('user_contact_infos');
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь у нас уже есть миграция. Давайте выполним приведенную ниже команду для миграции.

php artisan migrate
Войти в полноэкранный режим Выйти из полноэкранного режима

Я предполагаю, что таблица users уже включена.

Далее давайте применим метод Laravel hasOne() к нашей модели.

Шаг 2: Применение метода Laravel hasOne()

Сначала мы создадим нашу модель UserContactInfo.php. Выполните следующую команду:

php artisan make:model UserContactInfo
Войти в полноэкранный режим Выйти из полноэкранного режима

Ниже приведен полный код нашей модели UserContactInfo.

<?php

namespace AppModels;

use AppModelsUser;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentFactoriesHasFactory;

class UserContactInfo extends Model
{
    use HasFactory;

    /**
     * Get the user that owns the contact info.
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Далее мы настроим нашу модель User.php. Смотрите ниже полный код:

<?php

namespace AppModels;

use AppModelsUserContactInfo;
use LaravelSanctumHasApiTokens;
use IlluminateNotificationsNotifiable;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
     * Get the phone record associated with the user.
     */
    public function user_contact_info()
    {
        return $this->hasOne(UserContactInfo::class);
    }
}
Войти в полноэкранный режим Выход из полноэкранного режима

Как вы видите, мы внедрили метод Laravel hasOne() в наш класс модели User.php внутри метода user_contact_info(), который является именем нашего связанного класса модели.

Шаг 3: Сохраним запись с помощью Laravel hasOne()

Создание записи пользователя.

// Create User
$user = new User;
$user->name = 'Juan Dela Cruz';
$user->email = 'juan@gmail.com';
$user->password = bcrypt('password');
$user->save();

$user = new User;
$user->name = 'Juana Santa Cruz';
$user->email = 'juana@gmail.com';
$user->password = bcrypt('password');
$user->save();
Вход в полноэкранный режим Выход из полноэкранного режима

Создание контактной информации пользователя.

$user = User::find(1);

$userContactInfo = new UserContactInfo;
$userContactInfo->city = 'Dumaguete City';
$userContactInfo->phone = '09261234567';

$user->user_contact_info()->save($userContactInfo);
Вход в полноэкранный режим Выход из полноэкранного режима

Если у вас есть контактная информация одного пользователя и вы хотите использовать ее другим пользователем, то будет применен приведенный ниже код.

$userContactInfo = UserContactInfo::find(1);

$user = User::find(2);

$userContactInfo->user()->associate($user)->save();
Войти в полноэкранный режим Выйти из полноэкранного режима

Получить запись Пример:

$userContactInfo = User::find(1)->user_contact_info;
dd($userContactInfo);
Войти в полноэкранный режим Выход из полноэкранного режима

Надеюсь, этот учебник поможет вам. Посетите здесь https://codeanddeploy.com/blog/laravel/laravel-8-hasone-example, если вы хотите скачать этот код.

Счастливого кодирования 🙂

Оцените статью
Procodings.ru
Добавить комментарий