laravel APi resource Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: mapInto ()

DaveIt:

Eu tenho modelo de Postagem e Usuário com relação um a um e funciona bem:

//User.php

public function post(){
    return $this->hasOne(Post::class);
}


// Post.php

public function user() {
    return $this->belongsTo(User::class);
}

agora eu crio recursos de API:

php artisan make:resource Post
php artisan make:resource User

Preciso retornar todas as postagens com uma chamada de API e definir minha rota:

//web.php: /resource/posts

Route::get('/resource/posts', function () {
    return PostResource::collection(Post::all());
});

esta é minha classe de recursos de Postagens:

<?php

namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
use App\Http\Resources\User as UserResource;

class Posts extends Resource
{
/**
 * Transform the resource into an array.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function toArray($request)
{
      return [
        'id' => $this->id,
        'title' => $this->title,
        'slug' => $this->slug,
        'bodys' => $this->body,
        'users' => UserResource::collection($this->user),
        'published' => $this->published,
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
    ];

}
}

este é o erro:

Call to undefined method Illuminate\Database\Query\Builder::mapInto()

se eu remover:

'users' => UserResource::collection($this->user),

é trabalho, mas preciso incluir relações no meu api json, li e segui o documento em https://laravel.com/docs/5.5/collections .

esta é minha classe de recurso de usuário:

`` `

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class User extends Resource
{
/**
 * Transform the resource into an array.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function toArray($request)
{
   return [
       'user_id' => $this->user_id,
       'name' => $this->name,
       'lastname' => $this->lastname,
       'email' => $this->email
   ];
}
}

alguma ideia onde estou errado?

Maraboc:

O problema é que você usa UserResource::collection($this->user)e tem apenas um elemento, não uma coleção, então pode substituí-lo por new UserResource($this->user)assim:

return [
    'id' => $this->id,
    'title' => $this->title,
    'slug' => $this->slug,
    'bodys' => $this->body,
    'users' => new UserResource($this->user),
    'published' => $this->published,
    'created_at' => $this->created_at,
    'updated_at' => $this->updated_at,
];

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Chamada para método indefinido Illuminate \ Database \ Eloquent \ Builder :: mapInto ()

Laravel API ResourceCollection - Chamada ao método indefinido Illuminate \ Database \ Eloquent \ Builder :: mapInto ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: withTrashed ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: remember ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: withAccessToken ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: withAccessToken ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: exchangeges ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: tags ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: passageiros ()

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: getForeignKey ()

Como resolver Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: Notice ()? (laravel 5.3)

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: lists () quando propagando após atualizar para o Laravel 5.3

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: post ()

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: Vehicles ()

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: colFunction ()

Chamada para método indefinido Illuminate \ Database \ Eloquent \ Builder :: sortByDesc ()

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: notificar () Laravel 5.4

Laravel - Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: user ()

Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: map () no laravel 5.4

Laravel 5.4: Chamada ao método indefinido Illuminate / Database / Query / Builder :: getRelated ()

BadMethodCallException Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: searchable ()

BadMethodCallException com a mensagem 'Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: toArray ()'

Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: only_full_group_by ()

BadMethodCallException - Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: getAuthIdentifierName ()

Como resolver BadMethodCallException, Chamada para método indefinido Illuminate \ Database \ Query \ Builder :: filter ()

Laravel 7.6 Chamada para método indefinido Illuminate \ Database \ Eloquent \ Builder :: appends ()

Laravel - o método de chamada do modelo lança um método indefinido Illuminate \ Database \ Query \ Builder

A chamada para o método indefinido Illuminate \ Database \ Query \ Builder :: make () não está funcionando em minha máquina local

Erro nos testes de unidade do Laravel 5.2: BadMethodCallException: Chamada ao método indefinido Illuminate \ Database \ Query \ Builder :: make ()

TOP lista

quentelabel

Arquivo