#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
- Почему фрагмент добавляет: hasOne. В чем польза от этого?
- Это метод возвращаемого типа, и он стандартный, поэтому надстройка VS code предоставляет вам фрагмент(код), соответствующий отраслевым стандартам.
- Не облегчает пользователям вроде меня использование фрагмента без : hasOne? Я новичок, и я не мог понять, почему учебники не работали.
- Этот фрагмент будет работать, не беспокойтесь об этом. Просто объявите hasOne перед инициализацией класса,
use IlluminateDatabaseEloquentRelationsHasOne
и это должно сработать.
Кстати, намек на тип необязателен, поэтому фрагмент будет работать, если вы просто удалите :hasOne(возвращаемый тип метода). что вы уже пробовали.
Комментарии:
1. Идеальный. После его объявления и (переписывания после функции) все работает так, как должно быть. И спасибо за объяснение.
2. Счастливого кодирования 🙂