我试图在我的数据库中保持两个表之间的关系。
用户表:
Id User_id Name
联系人表:
Id User_Id contacts
我正在联系人表格中保存多个联系人。现在我想检索保存到User_ID的所有联系人。为此,我试图建立一个hasOne关系,但我得到一个错误的以下代码可以有人让我知道我做错了什么?我正在关注此官方文档。
用户模型:
class users extends Model
{
protected $table = "users";
public function contacts()
{
return $this->hasOne('App\contacts','User_Id');
}
}
联系人型号:
class contacts extends Model
{
public $table = "contacts";
public function Users(){
return $this->belongsTo('App\Users','User_id');
}
}
控制器:
public function eloquentget(){
$contacts = Users::find(1)->contacts->first();
return response()->json($contacts,200);
}
当我在邮递员中尝试此代码时,我得到一个例外:
ErrorException
Trying to get property of non-object
我做错了什么?任何帮助将不胜感激。
答案 0 :(得分:2)
由于您要为任何给定的用户保存多个联系人,因此您使用了错误的关系。您需要使用hasMany()
设置一对多关系。
class users extends Model
{
protected $table = "users";
public function contacts()
{
return $this->hasMany('App\contacts','User_Id','User_Id');
}
}
答案 1 :(得分:0)
尝试这样的事情
class users extends Model
{
protected $table = "users";
public function contacts()
{
return $this->hasMany('App\contacts','User_Id','User_Id');
}
}
在您的控制器上,您可以像这样使用它
$contacts= User::find(1)->contacts; // it will return an array of collection
答案 2 :(得分:0)
您不需要使用 - > first();因为你已经使用了关系hasOne
只需使用:
$ contacts = Users :: find(1) - > contacts;
return response() - > json($ contacts,200);