Laravel 片段 (v.1.13.0):关系问题(一对多,...)

Laravel Snippets (v.1.13.0): Problems with relationships (One-To-Many, ...)

简介 我正在将此插件用于 Visual Studio 代码。 与它建立关系时。我的观点似乎行不通。我在浏览器中收到错误消息(见下文)。

Laravel Snippets ID: onecentlin.laravel5-snippets Beschreibung: Laravel snippets for Visual Studio Code (Support Laravel 5 and above) Version: 1.13.0 Herausgeber: Winnie Lin Link zum Visual Studio Marketplace: https://marketplace.visualstudio.com/items?itemName=onecentlin.laravel5-snippets

我的模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

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

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

调用视图时浏览器显示错误

TypeError Return value of App\Models\Person::phone() must be an instance of App\Models\HasOne, instance of Illuminate\Database\Eloquent\Relations\HasOne returned (View: C:\Users\MusaSaglam\componenttest\resources\views\test\index.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>

但是如果我在模型中 public 函数 phone() 之后删除 : HasOne。一切正常。

两个问题

可以参考类型声明https://www.php.net/manual/en/language.types.declarations.php

  1. 为什么代码段添加:HasOne。这样做有什么好处?
  • 这是 return 类型的方法,它是标准的,因此 VS 代码插件为您提供了符合行业标准的片段(代码)。
  1. 使用没有 : HasOne 的代码片段不会让像我这样的用户更轻松吗?我是初学者,我不明白为什么教程不起作用。
  • 此代码段会起作用,不用担心。只需在 class 初始化之前声明 HasOne,如 use Illuminate\Database\Eloquent\Relations\HasOne,它应该可以工作。

顺便说一句,类型提示是可选的,因此如果您只是删除 :HasOne(return 类型的方法,则代码片段将起作用。你已经试过了。