Php 拉威尔外键关系
我有一个奇怪的问题 我有一个用户表和一个公司表。一个用户属于一家公司,而一家公司有许多用户 表的两个主键都是id 在laravel文档中,我阅读了以下内容: 此外,Eloquent假设外键应该具有 与父项的id列匹配的值 我在我的Php 拉威尔外键关系,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个奇怪的问题 我有一个用户表和一个公司表。一个用户属于一家公司,而一家公司有许多用户 表的两个主键都是id 在laravel文档中,我阅读了以下内容: 此外,Eloquent假设外键应该具有 与父项的id列匹配的值 我在我的公司模型中有这个: protected $table = 'company'; public function users() { return $this->hasMany(UserModel::class); } 当我尝试这个: $
公司模型中有这个:
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\u id
列 首先,我建议您将模型从CompanyModel
重命名为Company
,并从UserModel
重命名为User
然后确保您的users
表中有company\u id
。在您的用户
迁移文件中,将用户
表与公司
表连接起来,如下所示:
$table->integer('company_id')->unsigned();
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
$table->integer('company_id')->unsigned();
$table->foreign('company_id')->references('id')->on('companys')->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);
}
//用户模型
//Laravel将自动识别并使用您参考中的“公司id”字段
公共职能公司(){
返回$this->belongsTo(公司::类);
}
//公司模式
公共功能用户(){
返回$this->hasMany(用户::类);
}
然后,您可以在控制器中提取记录,如下所示:
$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);
$user=user::find(1);
$user\u company=$user->company;//这在控制器中可能不是必需的,您可以在视图中执行
dd($用户,$用户\公司);
文档表明,用户表中有一个公司id列。添加“id”得到的结果可能是错误的。我的用户表中有一个公司id列!我认为您应该在用户表中有一个company\u model\u id列,或者在关系中添加“company\u id”而不是“id”作为外键。您在用户模型中也有belongsTo方法,对吗?它是否与('users')一起工作$users=CompanyModel::find(1)->;