对于示例,我有三种简化的模型(用户请求获取电话):
User
Request
Phone
关系如下:
在用户模型中:
public function requests()
{
return $this->hasMany('App\Requests');
}
在手机型号中:
public function phoneRequests()
{
return $this->belongsTo('App\Requests');
// But it returns null
}
我需要从我的用户模型开始收集一个收藏,并获得所有需要的电话(我需要那里的名字)。问题在于phone_id位于请求模型中,而在文档中则相反。
我找不到实现我目标的任何关系。
理想的情况是要经历以下关系:
Auth::user()->requests->phoneRequests
// Would returns the phone name the user has requested
我也尝试使用原始SQL查询来执行此操作,但我宁愿使用关系。该怎么做?
答案 0 :(得分:1)
您应该在Requests
模型中建立电话关系,例如:
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.
还要注意,您在Phone模型中的关系是错误的,因此成为null的原因。那个应该再次具有User中的hasMany,因为根据您的表结构,电话可以有许多请求。
在您的Phone
模型中,您应该这样:
public function requests()
{
return $this->hasMany('App\Requests', 'phone_id');
}
因为根据您的数据库结构,一部电话可以属于许多请求。
答案 1 :(得分:0)
感谢newUserName02的评论,我的问题的解决方案是:
/**
* 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)
}
此外,我邀请您咨询this excellent article(法语),它很好地解释了与模式的关系。