gpt4 book ai didi

php - 拉维尔 4 : Model Relationships Not Working (sort of)?

转载 作者:可可西里 更新时间:2023-11-01 01:02:20 26 4
gpt4 key购买 nike

我的 Laravel 4 项目中有 3 个模型:EmployeeEmployeeClassEmployer:

class Employee extends Eloquent {
protected $table = 'users';
public function employee_class () {
return $this->belongsTo('EmployeeClass', 'employee_class_id');
}
}
class EmployeeClass extends Eloquent {
protected $table = 'employee_classes';
public function employees () {
return $this->hasMany('Employee');
}

public function employer () {
return $this->belongsTo('Employer');
}
}
class Employer extends Eloquent {
protected $table = 'employers';
public function employee_classes () {
return $this->hasMany('EmployeeClass');
}
}

EmployeeClass 关系按预期工作。我可以执行 EmployeeClass::find(1)->employees;EmployeeClass::find(1)->employer; 并返回对象。

尝试对其他两个进行相同的调用(检索与 EmployeeClass 的关系)不起作用。这两行都返回空集:

Employee::find(1)->employee_class;
Employer::find(1)->employee_classes;

然而,奇怪的是,这两行都可以正常工作:

Employee::find(1)->employee_class()->first();
Employer::find(1)->employee_classes()->first();

第一个示例返回 NULL(我相信它应该返回一个 Collection)。第二个示例返回一个 EmployeeClass 对象(预期的实例)。

我想指出的是,每个表中都有一个 id 为 1 的条目,并且每个条目都设置了 FK = 1,因此它们应该正确连接。事实上,我认为 EmployeeClass 工作正常的事实,以及获取查询并执行它(在第二个成功的代码集中)的事实也证明了这一点。

我确定我只是在做一些愚蠢的事情;也许另一双眼睛会有所帮助!

我可以使用解决方法(第二组代码),因为它似乎可以正常工作,但如果可能的话,我想让它变得干净和正确...

最佳答案

对于多词关系,函数应该是驼峰式(事实上,所有的类方法都应该)。访问模型的属性时,仍然允许在蛇形案例中访问关系名称(在您的示例中为“employee_class”,但请注意,这会绕过所有预先加载,您应该在与关系方法完全相同的情况下访问关系姓名。

在您的示例中,如果您将 employee_class(es) 函数重命名为 employeeClass(es),一切都应该有效。

// gets all employees and their class(es). the argument(s) for with()
// MUST match the names of the methods exactly.
Employee:with('employeeClass')->get();

// you MUST access eager loaded data in the same case as in with().
// if you access via snake case, eager loading is bypassed.
$employee->employeeClass;

// this also works but should generally be avoided.
Employee::find(1)->employeeClass()->first();

关于php - 拉维尔 4 : Model Relationships Not Working (sort of)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com