使用自定义主键的一对多关系
One to Many relationship using custom primary keys
我有 3 个 table:用户(id:主键)、招聘人员(user_id:主键和外键)和公司(id:主键)。
发生的情况是,招聘人员只是具有其他一些列的用户,基本上他是与应用程序交互的人。
由于只能有一个招聘人员与用户 table 关联,我决定使用 user_id 作为 FK 和 PK。
公司和招聘人员之间是一对多的关系,一个公司可以有很多招聘人员。
我正在尝试将招聘人员与一家公司相关联,但我做不到。
我正在使用 tinker 尝试实现这些功能。
我做的基本上是
$recruiter->company()->associate($company)
$recruiter-> save;
我得到 true 作为输出以及
App\Models\Recruiter {#4536
user_id: 4,
created_at: "2022-04-30 18:07:25",
updated_at: "2022-04-30 18:07:25",
company_id: null,
company: App\Models\Company {#4544
id: 1,
created_at: "2022-04-30 17:48:48",
updated_at: "2022-04-30 17:48:48",
name: "Apple",
company_image: "apple.png",
short_description: "Electronics company",
long_description: "Long description for electronics company",
email: "apple@gmail.com",
establishment_year: "1950-01-01",
website_url: "www.apple.com",
location: "United States of America",
followers_count: 0,
company_size: 0,
},
}
如您所见,公司以某种方式关联,但 company_id 未更新。
这些是模型
用户
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Model
{
use HasApiTokens, HasFactory, Notifiable;
public function recruiter()
{
return $this->hasOne('App\Models\Recruiter');
}
}
招聘人员
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Recruiter extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo('App\Models\User');
}
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'user_id');
}
}
公司
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
use HasFactory;
public function recruiters()
{
return $this->hasMany('App\Models\Recruiter', 'company_id', 'user_id');
}
}
招聘人员模型中的公司关系存在错误:
而不是:
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'user_id');
}
应该是
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'id'); //or return $this->belongsTo('App\Models\Company', 'company_id');
}
BelongsTo 关系语法为
return $this->belongsTo(ParentModel::class, 'foreign_key', 'owner_key');
哪里
foreign_key
是 child model/table 上的外国 ID 列('company_id' 在招聘人员 table 中)。
owner_key
是 parent model/table 上的主键或引用列(在这种情况下,公司 table 上的 'id' 列)
您遇到的问题是因为没有关于公司 table 的 'user_id' 列。
我有 3 个 table:用户(id:主键)、招聘人员(user_id:主键和外键)和公司(id:主键)。 发生的情况是,招聘人员只是具有其他一些列的用户,基本上他是与应用程序交互的人。
由于只能有一个招聘人员与用户 table 关联,我决定使用 user_id 作为 FK 和 PK。 公司和招聘人员之间是一对多的关系,一个公司可以有很多招聘人员。
我正在尝试将招聘人员与一家公司相关联,但我做不到。
我正在使用 tinker 尝试实现这些功能。 我做的基本上是
$recruiter->company()->associate($company)
$recruiter-> save;
我得到 true 作为输出以及
App\Models\Recruiter {#4536
user_id: 4,
created_at: "2022-04-30 18:07:25",
updated_at: "2022-04-30 18:07:25",
company_id: null,
company: App\Models\Company {#4544
id: 1,
created_at: "2022-04-30 17:48:48",
updated_at: "2022-04-30 17:48:48",
name: "Apple",
company_image: "apple.png",
short_description: "Electronics company",
long_description: "Long description for electronics company",
email: "apple@gmail.com",
establishment_year: "1950-01-01",
website_url: "www.apple.com",
location: "United States of America",
followers_count: 0,
company_size: 0,
},
}
如您所见,公司以某种方式关联,但 company_id 未更新。 这些是模型
用户
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Model
{
use HasApiTokens, HasFactory, Notifiable;
public function recruiter()
{
return $this->hasOne('App\Models\Recruiter');
}
}
招聘人员
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Recruiter extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo('App\Models\User');
}
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'user_id');
}
}
公司
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Company extends Model
{
use HasFactory;
public function recruiters()
{
return $this->hasMany('App\Models\Recruiter', 'company_id', 'user_id');
}
}
招聘人员模型中的公司关系存在错误:
而不是:
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'user_id');
}
应该是
public function company()
{
return $this->belongsTo('App\Models\Company', 'company_id', 'id'); //or return $this->belongsTo('App\Models\Company', 'company_id');
}
BelongsTo 关系语法为
return $this->belongsTo(ParentModel::class, 'foreign_key', 'owner_key');
哪里
foreign_key
是 child model/table 上的外国 ID 列('company_id' 在招聘人员 table 中)。
owner_key
是 parent model/table 上的主键或引用列(在这种情况下,公司 table 上的 'id' 列)
您遇到的问题是因为没有关于公司 table 的 'user_id' 列。