自从我使用Laravel进行编程以来已经有一段时间了,为了创建一个包含2个模型的外键 - 链接,我对我需要的关系感到困惑。
我有一个数据库,其中有一个包含公司的表“公司”,我还有一个名为“projects”的表,其中包含项目。
所以Projects-表包含一个名为“employercompany”的列,其中包含对company-table的外键约束。
我正在尝试使用
在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');
}
}
我知道这是一个简单的问题,但我无法绕过它
***** EDIT *****
我找到了解决方案。感谢Radical提供一些见解。
我最终将employercompany列更改为company_id,所有其他列也是如此。
之后我摆弄了我猜测的东西,我改变了我的数据库搜索查询
DB::table('projects')->get();
进入
Project::all();
不知道是否需要进行更改,但确实感觉确实如此。
答案 0 :(得分:1)
当像你所做的那样定义$(ps -ef | grep [o]pentsdb |grep -Ev "grep|cron" | awk '{print $2}')
关系时,Laravel将尝试根据类名“猜测”你正在使用的关键字。在这种情况下,它会在belongsTo
模型上查找列company_id
,因为您的模型名为Projects
。
就像您在Company
模型上使用projects()
方法所做的那样,您应该告诉Laravel您使用Company
列来引用employercompany
模型:< / p>
Company
有关详细信息,请参阅相关文档here。
此外,为了使事情变得更容易,可能值得尝试 - 如果可能 - 遵守Laravel'期望'调用您的数据库列,因此这样的情况会自动解决。
答案 1 :(得分:0)
应该是
$project = Project::find($id); //id of project
$compnany_name = ($project->employercompany()->get())->name;