我有两张桌子
Users
-ID
-Company
-Name
Companies
-ID
-company_name
“公司”列中填入了“公司”表中公司的ID,如此
用户
----------------------
|ID | Name | Company |
----------------------
| 1 | Bob | 1 |
| 2 | Mary | 1 |
| 3 | Sue | 2 |
Comapnies
-------------------
|ID | company_name|
-------------------
| 1 | Google |
| 2 | Microsoft |
如何通过公司ID的外键引用名称?
我的用户模型
public function company() {
return $this->hasOne('Company');
}
公司模式
public function company() {
return $this->belongsTo('User');
}
如果我做了
$users = User::find(1);
我得到了公司的ID,但我需要得到这个名字。
我已经尝试了
foreach ($users->company as $company){
echo $company->company_name;
}
和
$users->company->company_name;
只会导致尝试获取非对象的属性
和
foreach ($users->company as $company)
{
echo $company->pivot->comapny_name;
}
其中只说为foreach()提供的无效参数
我不确定该怎么做。
答案 0 :(得分:1)
您的关系未正确定义。在您的代码中,您尝试将User定义为父级,将Company定义为子级。但是,您的表格设置为公司是父级,用户是子级。基本上,包含外键的表(users表具有公司的外键)应该在belongsTo端。
因此,代替用户hasOne公司和公司belongsTo用户,它需要切换到公司hasOne用户和用户所属的公司。
除此之外,您的外键与Laravel默认使用的命名约定不匹配,因此您需要在关系定义中指定外键。
用户:
public function company() {
return $this->belongsTo('Company', 'Company');
}
公司:
public function user() {
return $this->hasOne('User', 'Company');
}
一旦您的关系设置正确,您就可以:
$user = User::find(1);
var_export($user->company->company_name);
答案 1 :(得分:0)
我认为你需要把你的关系声明放在这样:
public function company() {
return $this->hasOne('Company', 'Company');
}
Laravel relationships docs说这个
请注意 Eloquent假定关系的外键 基于型号名称 。在这种情况下,假设Phone模型使用a user_id外键。如果您希望覆盖此约定,您可以 将第二个参数传递给hasOne方法。此外,你可以通过 方法的第三个参数,用于指定哪个本地列 应该用于协会