Php 如何使用laravel eloquent获取加载关系的外键名

Php 如何使用laravel eloquent获取加载关系的外键名,php,mysql,laravel,laravel-5,eloquent,Php,Mysql,Laravel,Laravel 5,Eloquent,因此,我目前有3种型号Specie类型用户。我希望能够获取上次修改的用户的名称,该名称与物种模型有关 这些关系如下 Class Specie extends Model { public function type() { return $this->belongsTo('App\Type', 'type_id'); } public function user() { return $this->belongsTo('

因此,我目前有3种型号
Specie
类型
用户
。我希望能够获取上次修改的用户的名称,该名称与
物种
模型有关

这些关系如下

Class Specie extends Model {
   public function type()
   {
        return $this->belongsTo('App\Type', 'type_id');
   }

   public function user()
   {
        return $this->belongsTo('App\User', 'user_id');
   }
}

Class Type extends Model {
   public function specie()
   {
        return $this->hasMany('App\Specie', 'type_id');
   }
}

Class User extends Model {
   public function specie()
   {
        return $this->hasMany('App\Specie', 'user_id');
   }
}
我试过这个

Class Specie extends Model {
    public function lastModified()
    {
        return $this->belongsTo('App\User', 'last_modified_by');
    }
}
然后使用下面的代码

$this->type->with(['specie.lastModified' => function ($query) use 
        ($userId) {
            $query->where('user_id', $userId);
        }])->get();
不幸的是,这似乎不起作用

但是,通过使用此代码

$this->type->with(['specie' => function ($query) use ($userId) {
            $query->where('user_id', $userId);
        }])->get();
我能得到这个:

"id": 1,
"type": "Halo",
"created_at": "2019-07-20 13:02:53",
"updated_at": "2019-07-20 13:02:53",
"specie": [
  {
    "id": 5,
    "user_id": 1,
    "type_id": 1,
    "note": "et",
    "created_by": 1,
    "last_modified_by": 1,
  }
]
但是,我想要得到的是上次修改的人名的名称,它是
用户
模型中的主键,也是
物种
模型中的外键

这就是我期望得到的:

"id": 1,
"type": "Halo",
"created_at": "2019-07-20 13:02:53",
"updated_at": "2019-07-20 13:02:53",
"specie": [
  {
    "id": 5,
    "user_id": 1,
    "type_id": 1,
    "note": "et",
    "created_by": 1,
    "last_modified_by": 1,
    "last_modified_name": 'gerrard'
  }
]

从您雄辩的实体关系中:

Specie
Type(Type)
是相关的(一对多)

种类
用户(用户)
是相关的(一对多)

种类
用户(上次修改)
是相关的(一对多)

用户
类型
不相关

因此,要包含用户名,必须通过
lastModified()
方法查询
Specie
模型

$this->lastModified()->with(['specie'=>函数($query)use($userId){
$query->where('user\u id',$userId);
}])->get();
你应该期待这样的结果

“id”:1,
“名称”:“用户名称”
//任何其他用户数据
“创建时间”:“2019-07-20 13:02:53”,
“更新时间”:“2019-07-20 13:02:53”,
“物种”:[
{
“id”:5,
“用户id”:1,
“类型识别号”:1,
“注”:“et”,
“创建人”:1,
“上次修改者”:1,
}
]
根据结果,值为
1
specie
中的字段(外键)
last\u modified\u应与
user
中的字段
id
匹配

另外,我假设您的用户名字段是
name
。它将包含在返回的用户数据中

更新


您可以通过
类型
表,使用即时加载从
用户
表中获取任何用户数据,除非它们是相关的。因此,在嵌套模型之前,模型必须是相关的(即相互约束的),例如使用即时加载。查看此内容以更好地理解此内容。

您没有lastModified的任何模型??lastModified不是一个模型,因此首先创建此模型并在模型中定义您的表名..确定没有lastModified表。。。物种表有两个外键
user\u id
last\u modified\u by
last\u modified\u by的值是用户模型中的用户id。。。用户模型有一个名称,因此我想获取该用户的名称。。请再次阅读问题,是否将
lastModified()
方法包含在
Specie
模型中?另外,您从何处使用查询
$this->…
?这不是我期望的其余部分,请检查我问题中的预期结果好吗?如果您没有得到预期结果,则
“上次修改的名称”
不是
规格表中的字段。是吗?它是用户表中的一个字段。我需要将类型名作为主对象,而不是用户。我希望用户成为物种阵列的一部分