自升级到5.6以来,Laravel Resource集合不再有效

时间:2018-02-14 22:17:48

标签: laravel

我有以下代码:

模型

class Document extends Model
{
    use OwnedByCustomer, OwnedByUser;

    public function document_type() {
        return $this->belongsTo(DocumentType::class);
    }
}

class DocumentType extends Model
{
    use HasTranslations;

    public $translatable = ['name'];
}

资源

use Illuminate\Http\Resources\Json\Resource;

class DocumentResource extends Resource {
    public function toArray($request) {
        return [
            'id' => $this->id,
            'created_at' => $this->created_at,
            'document_type' => DocumentType::make($this->document_type),
            'description' => $this->description,
            'batch_number' => $this->batch_number,
            'size' => $this->size,
            'file_name' => $this->file_name
        ];
    }
}

和     使用Illuminate \ Http \ Resources \ Json \ Resource;

class DocumentTypeResource extends Resource {
    public function toArray($request) {
        return [
            'id' => $this->id,
            'enum' => $this->enum,
            'name' => $this->getTranslations('name')
        ];
    }
}

然后我有一个控制器执行此操作:

class DocumentController extends Controller {
    public function index() {
        $query = Document::query();
        $query->withoutGlobalScope(OwnedByUser::class);
        return DocumentResource::collection($query->paginate());
    }

这是我一直广泛使用的常见设置,没有太多问题。但是,由于某种原因,集合未包装在json数据属性中,并且请求中也缺少链接和元属性。 此外,返回的对象包含所有属性,即使我删除了其中的一些属性。

我现在严重迷失了可能造成这种情况的原因。我从5.6开始就有这个,但我找不到原因。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

来不及回复,但这实际上通过 withoutWrapping();

解决了地雷问题

只需使用以下内容:

 - use Illuminate\Http\Resources\Json\JsonResource; 
 - JsonResource::withoutWrapping();

代替

 - use Illuminate\Http\Resources\Json\Resource; 
 - Resource::withoutWrapping();