Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 理解laravel雄辩模型的困难_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 理解laravel雄辩模型的困难

Php 理解laravel雄辩模型的困难,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我已经有一段时间没有用Laravel编程了,为了创建一个与2个模型的外键链接,我被需要的关系难住了 我有一个数据库,其中有一个包含公司的表company,还有一个名为projects的表,其中包含项目 因此Projects-table包含一个名为employercompany的列,该列对company表具有外键约束 我正试图在laravel的一个项目页面上用 {{$project->employercompany->name}} 但继续努力获取非对象的属性 我的模型页面如下所示:

我已经有一段时间没有用Laravel编程了,为了创建一个与2个模型的外键链接,我被需要的关系难住了

我有一个数据库,其中有一个包含公司的表company,还有一个名为projects的表,其中包含项目

因此Projects-table包含一个名为employercompany的列,该列对company表具有外键约束

我正试图在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');
   }
}
我知道这是一个很容易的问题,但我就是想不通

*****编辑*****

我找到了解决办法。感谢您提供了一些见解

最后,我将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');
}