麻烦理解laravel雄辩的模型

时间:2017-05-19 09:43:45

标签: php mysql laravel eloquent

自从我使用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();

不知道是否需要进行更改,但确实感觉确实如此。

2 个答案:

答案 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;