Laravel 5.1:方法"创建"接收数据

时间:2016-08-09 22:07:49

标签: php laravel

我有一个从Person和Address接收数据的表单。我想在Person表和Address表中保存特定数据。

我使用的方法"创建"从Person模型首先持久化Person,此方法接收一个数据数组(与Person和Address相关)作为参数。所以,我得到一个错误" SQLSTATE [42S22]:找不到列...",因为它试图将地址值插入到Person表中。

如何处理?

提前致谢。

2 个答案:

答案 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模型包含hasOnehasMany 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部分。