我有一个奇怪的问题。
我有一个用户表和一张公司表。用户属于公司,公司有很多用户。
表的两个主键都是id。
在laravel文档中,我阅读了以下内容:
此外,Eloquent假设外键应该有 值与父级的id列匹配。
我在CompanyModel
:
protected $table = 'company';
public function users()
{
return $this->hasMany(UserModel::class);
}
当我尝试这个时:
$users = CompanyModel::find(1)->users;
dd($users);
它不起作用。当我在我的关系中添加一个外键时,它可以工作!?:
protected $table = 'company';
public function users()
{
return $this->hasMany(UserModel::class, 'id');
}
这很奇怪吧?我究竟做错了什么。
- 编辑 -
在我的users
表中,我有一个company_id
列!
答案 0 :(得分:1)
首先,我建议您将模型从CompanyModel
重命名为Company
,将UserModel
重命名为User
。
然后确保company_id
表中有users
。在users
迁移文件中,将users
表与companies
表连接起来:
$table->integer('company_id')->unsigned(); $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
不要忘记刷新数据库。
然后在您的模型中,定义关系:
// User model // Laravel will automatically identify and use the `company_id` field in your reference public function company(){ return $this->belongsTo(Company::class); } // Company model public function users(){ return $this->hasMany(User::class); }
然后您可以在控制器中获取记录:
$user = User::find(1); $user_company = $user->company; // This might not be necessary in your controller, you can do it in your view dd($users, $user_company);