Laravel关系自定义密钥 我刚到拉雷维尔几周,现在我正在学习人际关系任务。我一直在搜索关于它的相关主题,但我不知道为什么我的代码不起作用。

Laravel关系自定义密钥 我刚到拉雷维尔几周,现在我正在学习人际关系任务。我一直在搜索关于它的相关主题,但我不知道为什么我的代码不起作用。,laravel,relationship,Laravel,Relationship,我有两张桌子和电话: 员工: ID int 名称varchar 年龄智力 位置varchar 地址varchar 在时间戳处创建 在时间戳处更新\u 在时间戳处删除\u 电话: ID int 没有瓦查尔 雇员身份证 我用的是Laravel v.8 型号:PhoneS.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloqu

我有两张桌子和电话:

员工:

  • ID int
  • 名称varchar
  • 年龄智力
  • 位置varchar
  • 地址varchar
  • 在时间戳处创建
  • 在时间戳处更新\u
  • 在时间戳处删除\u
电话:

  • ID int
  • 没有瓦查尔
  • 雇员身份证

我用的是Laravel v.8 型号:PhoneS.php

namespace App\Models;

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

class PhoneS extends Model
{
    use HasFactory;

    protected $table = "Phone";
 
    public function EmployeeS()
    {
        return $this->belongsTo('App\Models\EmployeeS', 'Employee_ID', 'ID');
    }
}

模型:EmployeeS.php

namespace App\Models;

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

class EmployeeS extends Model
{
    use HasFactory;

    protected $table = "Employee";
    
    public function PhoneS()
    {
        return $this->hasOne('App\Models\PhoneS', 'Employee_ID', 'ID' );
    }
}

控制器:Phone.php

namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
 
 use App\Models\EmployeeS;
 
 class Employee extends Controller {
     public function index()
     {
         $EmployeeS = EmployeeS::all();
         return $EmployeeS;     
         
     }
 }
结果:

[
{
“ID”:1,
“姓名”:“约翰”,
“年龄”:26岁 “职位”:“IT”,
“地址”:“林荫大道街”
“创建时间”:空,
“更新位置”:空,
“已删除位置”:空
},
{
“ID”:2,
“名称”:“Doe”,
“年龄”:25岁,
“位置”:“Acc”,
“地址”:“大道街”,
“创建时间”:空,
“更新位置”:空,
“已删除位置”:空
},


]

没有字段:电话在那里…
当我尝试使用:return$EmployeeS->PhoneS访问它时,它会显示错误消息:

例外情况
此集合中不存在属性[PhoneS] 例如

有人能告诉我发生了什么事吗
我相信拉威尔的关系概念中有一些我遗漏的东西。
你能告诉我我错过的地方吗?

Thanx Previous..

EmployeeS::all()
将返回表示数据库记录的EmployeeS对象的集合

因此,
$EmployeeS->PhoneS
将不起作用,因为这就像试图访问集合中的相关模型一样-因此会出现错误

$EmployeeS = EmployeeS::all(); //$EmployeeS is a collection

foreach($EmployeeS as $employee) {
    //Iterating over each object in collection
    echo $employee->PhoneS //this will work
}
但是,如果您需要相关记录,那么最好立即加载该关系,以避免N+1查询问题

$Employee::with('PhoneS')->all();

欢迎来到SO<代码>员工::全部()to
EmployeeS::with('PhoneS')->get()检查,如果您遵循建议的标准,您将不会因为非受迫性错误而头痛。太棒了!Thanx@KamleshPaul和TpojkaNice。。。它就像一个符咒。谢谢但为什么当我使用:$EmployeeS[0]时,没有电话字段。但我可以使用:$EmployeeS[0]->电话访问它