Php 理解laravel雄辩模型的困难
我已经有一段时间没有用Laravel编程了,为了创建一个与2个模型的外键链接,我被需要的关系难住了 我有一个数据库,其中有一个包含公司的表company,还有一个名为projects的表,其中包含项目 因此Projects-table包含一个名为employercompany的列,该列对company表具有外键约束 我正试图在laravel的一个项目页面上用Php 理解laravel雄辩模型的困难,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我已经有一段时间没有用Laravel编程了,为了创建一个与2个模型的外键链接,我被需要的关系难住了 我有一个数据库,其中有一个包含公司的表company,还有一个名为projects的表,其中包含项目 因此Projects-table包含一个名为employercompany的列,该列对company表具有外键约束 我正试图在laravel的一个项目页面上用 {{$project->employercompany->name}} 但继续努力获取非对象的属性 我的模型页面如下所示:
{{$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');
}
}
我知道这是一个很容易的问题,但我就是想不通
*****编辑*****
我找到了解决办法。感谢您提供了一些见解
最后,我将EmployeerCompany列更改为company_id,其他所有列也是如此
在那之后,我胡乱摆弄了一下,我猜修复的问题是我更改了我的数据库搜索查询
DB::table('projects')->get();
进入
不知道这是否是需要的改变,但感觉确实是这样。应该是这样的
$project = Project::find($id); //id of project
$compnany_name = ($project->employercompany()->get())->name;
在像您这样定义belongsTo关系时,Laravel将尝试根据类名“猜测”您正在使用的键。在本例中,它将在您的项目模型上查找列company\u id,因为您的模型称为company
就像您在公司模型上对projects方法所做的那样,您应该告诉Laravel您正在使用EmployeerCompany列引用公司模型:
有关更多信息,请参阅相关文档
此外,为了使事情变得更简单,如果可能的话,可能值得尝试遵守Laravel“期望”调用数据库列的内容,这样类似的情况就会自动得到解决。为了响应您的编辑:确实需要将DB更改为Project::这一更改。在最初的情况下,您只是在表上进行查询,因此Laravel不知道如何将其与项目模型联系起来—您的结果可能只是标准PHP对象的集合。通过查询Project::all,Laravel知道如何将结果解释为项目模型对象,从而也引入了相关关系。非常感谢您的解释。我想它就是这么做的最近一直在使用Symfony,所以没想到这有这么大的区别。谢谢你的解释!
Project::all();
$project = Project::find($id); //id of project
$compnany_name = ($project->employercompany()->get())->name;
public function employercompany()
{
return $this->belongsTo('App\Company', 'employercompany');
}