Фрагменты Laravel (v. 1.13.0): Проблемы с отношениями (Один ко многим, …)

#laravel #visual-studio-code #relationship

Вопрос:

Введение Я использую это дополнение для кода Visual Studio. При создании отношений с ним. Мои взгляды, похоже, не работают. Я получаю ошибку в браузере (см. Ниже).

Идентификатор фрагментов Laravel: onecentlin.laravel5-фрагменты Beschreibung: Фрагменты Laravel для кода Visual Studio (поддержка Laravel 5 и выше) Версия: 1.13.0 Herausgeber: Винни Лин Ссылка на рынок Visual Studio: https://marketplace.visualstudio.com/items?itemName=onecentlin.laravel5-snippets

Моя Модель

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;

class Person extends Model
{
    use HasFactory;
    protected $fillable = [];

    /**
     * Get the phone associated with the Person
     *
     * @return IlluminateDatabaseEloquentRelationsHasOne
     */
    public function phone(): HasOne
    {
        return $this->hasOne(Phone::class);
    }
}
 

Ошибка, отображаемая браузером при вызове представления

Возвращаемое с ошибкой типа значение AppModelsPerson::phone() должно быть экземпляром AppModelshasOne, возвращенным экземпляром IlluminateБаза данныхКрасноречивыйОтношенияhasOne (Просмотр: C:UsersMusaSaglamcomponenttestresourcesviewstestindex.blade.php)

Мое мнение

 <x-layout>

    <main class="main" id="top">
      <div class="container" data-layout="container">
        <script>
          var isFluid = JSON.parse(localStorage.getItem('isFluid'));
          if (isFluid) {
            var container = document.querySelector('[data-layout]');
            container.classList.remove('container');
            container.classList.add('container-fluid');
          }
        </script>
  
        <x-nav.admin-nav/>
        <div class="content">
            <x-nav.admin-nav-top/>

            <h1>People</h1>
            @foreach ($people as $person)
                <h2>{{ $person->id }}</h2>
                <h2>{{ $person->phone->number }}</h2>
            @endforeach


        </div>
      </div>
    </main>
  </x-layout>
 

Но если я удалю : hasOne после публичной функции телефона() в моей модели. Все работает нормально.

Два вопроса

  • Почему фрагмент добавляет : hasOne. В чем польза от этого?
  • Не облегчает пользователям вроде меня использование фрагмента без : hasOne? Я новичок, и я не мог понять, почему учебники не работали.

Ответ №1:

Вы можете обратиться к объявлению типа https://www.php.net/manual/en/language.types.declarations.php

  1. Почему фрагмент добавляет: hasOne. В чем польза от этого?
  • Это метод возвращаемого типа, и он стандартный, поэтому надстройка VS code предоставляет вам фрагмент(код), соответствующий отраслевым стандартам.
  1. Не облегчает пользователям вроде меня использование фрагмента без : hasOne? Я новичок, и я не мог понять, почему учебники не работали.
  • Этот фрагмент будет работать, не беспокойтесь об этом. Просто объявите hasOne перед инициализацией класса, use IlluminateDatabaseEloquentRelationsHasOne и это должно сработать.

Кстати, намек на тип необязателен, поэтому фрагмент будет работать, если вы просто удалите :hasOne(возвращаемый тип метода). что вы уже пробовали.

Комментарии:

1. Идеальный. После его объявления и (переписывания после функции) все работает так, как должно быть. И спасибо за объяснение.

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