自从我使用 Laravel 编程以来已经有一段时间了,我对创建具有 2 个模型的外键链接所需的关系感到困惑。
我有一个数据库,其中有一个包含公司的表“company”,还有一个名为“projects”的表,其中包含项目。
因此,Projects 表包含一个名为“employercompany”的列,该列具有对公司表的外键约束。
我正在尝试使用
在 laravel 的项目页面中打印出公司名称{{$project->employercompany->name}}
但不断收到“尝试获取非对象的属性”
我的模型页面如下所示:
//公司
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
public function projects()
{
return $this->hasMany('App\Projects', 'employercompany', 'id');
}
}
和
//项目
namespace App;
use Illuminate\Database\Eloquent\Model;
class Projects extends Model
{
public function employercompany()
{
return $this->belongsTo('App\Company');
}
}
我知道这是一个简单的问题,但我就是无法理解它
*****编辑*****
我找到了解决方案。感谢 Radical 提供了一些见解。
我最终将雇主公司列更改为company_id,所有其他列也如此。
之后,我摆弄了我猜修复的问题,那就是我更改了数据库搜索查询
DB::table('projects')->get();
进入
Project::all();
不知道这是否是需要的改变,但感觉确实如此。
最佳答案
当像您一样定义 belongsTo
关系时,Laravel 将尝试根据类名“猜测”您正在使用的键。在本例中,它将在您的 Projects
模型中查找列 company_id
,因为您的模型名为 Company
。
就像您对 Company
模型上的 projects()
方法所做的那样,您应该告诉 Laravel 您正在使用 employercompany
列引用 Company
模型:
public function employercompany()
{
return $this->belongsTo('App\Company', 'employercompany');
}
更多信息请参见相关文档here .
此外,为了让事情变得更容易,可能值得尝试 - 如果可能 - 遵守 Laravel “期望”你的数据库列被调用的内容,这样类似的情况就会自动解决。
关于php - 无法理解 laravel Eloquent 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066639/