softDeletes()要求deleted_at存在于保存数据的请求中

时间:2016-09-16 05:30:46

标签: php laravel eloquent json-api

我试图将deleted_at字段添加到mysql数据库。我正在使用laravel 5.2& https://github.com/nilportugues/laravel5-jsonapi在我的api中

迁移文件包含以下内容:

$table->timestamps();
$table->softDeletes();

模特课:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Scene extends Model
{
    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];

1 - 这个在发布请求时将数据保存到数据库:

{
"data": {
 "type": "scene",
 "attributes": {
  "title": "scene_N9DbG After S",
  "version": "rLEjNpeebq",
  "deleted_at": null
  }
 }
}

2 - 这个在发布时不会将数据保存到数据库:

{
"data": {
 "type": "scene",
 "attributes": {
  "title": "scene_N9DbG After S",
  "version": "rLEjNpeebq"
  }
 }
}

我收到此错误:

DataException in DataObject.php line 62:
An error with the provided data occured.

at DataObject::assertPost(array('type' => 'scene', 'attributes' => array( 'title' => 'scene_N9DbG After S', 'version' => 'rLEjNpeebq', 'created_at' => '2016-09-16 05:46:51', 'updated_at' => '2016-09-16 05:46:51')), object(JsonApiSerializer), 'App\Scene', object(ErrorBag)) in CreateResource.php line 58

这是因为laravel还是我正在使用的包装造成的?如何在不发送deleted_at的情况下保存数据?我想我不必在每个请求上发送deleted_at。如果需要更多数据,请告诉我。

以下文件: https://laravel.com/docs/5.2/eloquent#soft-deleting

1 个答案:

答案 0 :(得分:1)

来自你的包裹。来自文档:

  

POST要求接受所有成员属性,即使是映射器隐藏的成员属性。

如果您想更改此设置,您似乎需要在Transformer对象上定义getRequiredProperties()方法。

/**
 * List the fields that are mandatory in a persitence action (POST/PUT). 
 * If empty array is returned, all fields are mandatory.
 */
public function getRequiredProperties()
{
    return ['title', 'version'];
}

我之前从未使用过该软件包,所以我无法测试它是否真的有效,但这是我在查看文档,代码和问题后能够收集到的内容几分钟。