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