我有一个从Person和Address接收数据的表单。我想在Person表和Address表中保存特定数据。
我使用的方法"创建"从Person模型首先持久化Person,此方法接收一个数据数组(与Person和Address相关)作为参数。所以,我得到一个错误" SQLSTATE [42S22]:找不到列...",因为它试图将地址值插入到Person表中。
如何处理?
提前致谢。
答案 0 :(得分:1)
您应该在模型的
上设置$ fillable或$ guarded属性例如,如果您的请求包含以下数据:
[
'name' => 'Bill Mickelson',
'street' => '123 Test Lane',
'city' => 'Baltimore',
'state' => 'Maryland'
]
和'name'与Person相关,但另外3个与Address相关,您将执行以下操作...
在Person.php中:
protected $fillable = [ 'name' ];
在Address.php中:
protected $fillable = [ 'street', 'city', 'state' ];
在此之后,当您调用create()时,只会填充$ fillable中指定的字段。
顺便说一下,你也可以设置$ guarded来指定哪个不应该是可填充的,即如果这些模型中的每一个都有'id'并且你想要其他所有内容都是可填充的,你可以这样做:
protected $guarded = [ 'id' ];
答案 1 :(得分:0)
我假设您的Person
模型包含hasOne
或hasMany
Address
。
您不应该在Person
的create方法中传递地址属性。您可以做的是先create
Person
,然后保存与该人相关的Address
个对象。
例如:
$formData = ['name' => 'John', 'age' => 25, 'country' => 'US'];
$person = Person::create([
'name' => $formData->name,
'age' => $formdata->age
]);
$address = new Address([
'name' => $formData->country
]);
// Save $address related to $person
// for ex. if Person hasOne Address:
$person->address()->save($address);
请参阅文档中的Inserting & Updating Related Models部分。