Laravel 拉雷维尔口若悬河地谈了几段关系
我为示例简化了三个模型(用户请求获取电话):Laravel 拉雷维尔口若悬河地谈了几段关系,laravel,laravel-5,eloquent,relationship,Laravel,Laravel 5,Eloquent,Relationship,我为示例简化了三个模型(用户请求获取电话): 用户 身份证 登录 请求 身份证 用户id 电话号码 电话 身份证 名字 关系如下: 在用户模型中: public function requests() { return $this->hasMany('App\Requests'); } public function phoneRequests() { return $this->belongsTo('App\Requests'); // But
用户
- 身份证
- 登录
请求
- 身份证
- 用户id
- 电话号码
电话
- 身份证
- 名字
public function requests()
{
return $this->hasMany('App\Requests');
}
public function phoneRequests()
{
return $this->belongsTo('App\Requests');
// But it returns null
}
在手机型号中:
public function requests()
{
return $this->hasMany('App\Requests');
}
public function phoneRequests()
{
return $this->belongsTo('App\Requests');
// But it returns null
}
我需要从用户模型开始收集所有请求的手机(我需要它们的名称)。问题是电话号码在请求模型中,而在文档中则相反
我找不到任何关系来实现我的目标
理想情况是通过以下关系:
Auth::user()->requests->phoneRequests
// Would returns the phone name the user has requested
我还尝试使用原始SQL查询,但我更喜欢使用关系。如何做到这一点?您的
请求中应该有一个电话关系模型,如下所示:
public function phone()
{
return $this->belongsTo('App\Phone');
}
因此,现在您可以通过手机为用户获取所有请求,如下所示:
$user->requests->first()->phone; // this is for the first request, but you can get the phone for each request in a loop, I guess you know how to do that.
还要注意的是,您在手机模型中的关系是错误的,因此会得到null。这一个应该再次在用户中有多个,因为根据您的表结构,手机可以有多个请求
在您的手机
型号中,您应该具备以下功能:
public function requests()
{
return $this->hasMany('App\Requests', 'phone_id');
}
因为根据您的数据库结构,手机可以属于许多请求。感谢的评论,我的问题的解决方案是:
/**
* Returns all requests made by this client
* @return Collection
*/
public function requests()
{
return $this->hasMany('App\Requests');
}
/**
* Returns all the phones requested by the client
* @return Collection
*/
public function phones()
{
return $this->belongsToMany('App\Phone', 'phone_request');
// where phone_request is the name of the pivot table (App\Requests)
}
另外,我邀请您(用法语)咨询,这很好地解释了与模式的关系。Jonas是对的,这是用户和电话之间的归属关系,请求是连接表。在这里查看我的答案:@newUserName02+1在你的答案上,这对我帮助很大!我将回答这个问题。解决方案非常简单。我只是照着文件做的,但心里有你的答案,谢谢你。我什么都试过了。它总是返回null。我觉得这种关系没有发生。你能更新你的答案吗?因为我不理解最后一点。你可以调试什么是Auth::user()->请求
返回?谢谢你的好答案,我找到了一个更好的解决方案。