Laravel 按复合键的关系插入 table
Laravel inserting by relationship to composite key table
我目前有这些 table:
用户table
id (primary key), name, email
用户模型
protected $fillable = ['name', 'email'];
protected $visible = ['id','name','email'];
//Relationship
public function customAttributes()
{
return $this->hasMany('App\Models\UserAttribute');
}
UserAttribute Table
user_id, attribute_id, value //user_id and attribute_id is a composite key, both foreignkeys acting as primary keys establishing an unique combination
用户属性模型
protected $fillable = ['user_id', 'attribute_id','value'];
protected $visible = ['user_id', 'attribute_id','value'];
我将用下面的例子来解释这个问题:
$user = $this->user->create(['name' => 'admin', 'email' => 'admin@admin.com']);
//This works
$user->customAttributes()->save(new \App\Models\UserAttribute(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1']));
//This does not work
$user->customAttributes()->create([new \App\Models\UserAttribute(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1'])]);
我可以为我想要的每个自定义重复 save
,因为它有效,但我想弄清楚为什么 create
不起作用。
我在使用 create 时遇到的错误是(是的,我已经检查了 table 中未在此处列出的记录):
Cannot add or update a child row: a foreign key constraint fails (`testdatabase`.`user_attributes`,
CONSTRAINT `user_attributes_attribute_id_foreign` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`id`))
这是它试图执行的查询:
insert into `user_attributes` (`user_id`) values (1)
我很好奇为什么这不适用于 create
,我不确定它是否与这个特定场景有关(通过关系创建复合键 table ).它在某种程度上忽略了正在执行的查询中的 value
和 attribute_id
字段
试试这个:
$user->customAttributes()->create(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1']);
customAttributes()
已经 returns 您是 UserAttribute 模型的实例,当您通过该关系使用 create()
方法时不需要注入该依赖项
您的查询应该如下所示;
$user->customAttributes()->insert([
[
'user_id' => $user->id,
'attribute_id' => 1,
'value' => 'Just a custom1'
],
[
'user_id' => $user->id,
'attribute_id' => 2,
'value' => 'Just a custom2'
],
]);
我目前有这些 table:
用户table
id (primary key), name, email
用户模型
protected $fillable = ['name', 'email'];
protected $visible = ['id','name','email'];
//Relationship
public function customAttributes()
{
return $this->hasMany('App\Models\UserAttribute');
}
UserAttribute Table
user_id, attribute_id, value //user_id and attribute_id is a composite key, both foreignkeys acting as primary keys establishing an unique combination
用户属性模型
protected $fillable = ['user_id', 'attribute_id','value'];
protected $visible = ['user_id', 'attribute_id','value'];
我将用下面的例子来解释这个问题:
$user = $this->user->create(['name' => 'admin', 'email' => 'admin@admin.com']);
//This works
$user->customAttributes()->save(new \App\Models\UserAttribute(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1']));
//This does not work
$user->customAttributes()->create([new \App\Models\UserAttribute(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1'])]);
我可以为我想要的每个自定义重复 save
,因为它有效,但我想弄清楚为什么 create
不起作用。
我在使用 create 时遇到的错误是(是的,我已经检查了 table 中未在此处列出的记录):
Cannot add or update a child row: a foreign key constraint fails (`testdatabase`.`user_attributes`,
CONSTRAINT `user_attributes_attribute_id_foreign` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`id`))
这是它试图执行的查询:
insert into `user_attributes` (`user_id`) values (1)
我很好奇为什么这不适用于 create
,我不确定它是否与这个特定场景有关(通过关系创建复合键 table ).它在某种程度上忽略了正在执行的查询中的 value
和 attribute_id
字段
试试这个:
$user->customAttributes()->create(['user_id' => $user->id, 'attribute_id' => 1, 'value' => 'Just a custom1']);
customAttributes()
已经 returns 您是 UserAttribute 模型的实例,当您通过该关系使用 create()
方法时不需要注入该依赖项
您的查询应该如下所示;
$user->customAttributes()->insert([
[
'user_id' => $user->id,
'attribute_id' => 1,
'value' => 'Just a custom1'
],
[
'user_id' => $user->id,
'attribute_id' => 2,
'value' => 'Just a custom2'
],
]);