Php Laravel将多个关系雄辩地映射到同一个表

Php Laravel将多个关系雄辩地映射到同一个表,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有下表: Table: rental_request Columns: id int(11) AI PK user_id int(11) address text number varchar(45) kvm varchar(45) rental varchar(45) zip varchar(45) city varchar(45) timestamp datetime created_at datetime updated_at datetime caseworker

我有下表:

Table: rental_request
Columns:
id int(11) AI PK 
user_id int(11) 
address text 
number varchar(45) 
kvm varchar(45) 
rental varchar(45) 
zip varchar(45) 
city varchar(45) 
timestamp datetime 
created_at datetime 
updated_at datetime 
caseworker int(11)
其中
user\u id
caseworner
指向我的
users

现在,我正在尝试在我的
Laravel
应用程序中创建此关系:

    class rental_request extends Model
{
    protected $table = 'rental_request';
    protected $fillable = ['user_id','address', 'number', 'kvm','rental','zip','city', 'caseworker'];

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

    public function caseworker()
    {
        return $this->hasOne('App\User', 'user_id', 'caseworker');
    }
}
在我的控制器中,我使用以下方法从表中收集数据:

rental_request::orderBy('id', 'desc')->get();
现在,这实际上是有效的,但只适用于
用户
,而不适用于
个案工作者

这意味着我的结果中有一个
user
对象,但没有一个
caseworner
对象


有人能告诉我我做错了什么吗?

你的个案工作者关系也应该被定义为
属于
关系。
租赁请求
模型具有外键,因此它属于外键模型

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

您可以使用with来获取案例工作者

rental_request::with(['caseworker','user'])->orderBy('id', 'desc')->get();

hasOne
希望您在
users
表上有like
caseworner\u id
。我尝试了这个,但是没有result@MarcRasmussen那么我猜您尝试此操作的
rental\u请求
记录中没有相关的案例工作者。这就是需要定义关系的方式。@Marc Rasmussen这可能无法帮助您,因为此代码只是预加载关系。您的
caseworner
关系不起作用,因为它没有正确定义。您应该使用patricus答案中的代码。然后,
$rentalRequest->casework
和带有('casework')
将为您工作。