Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

LARAVEL JSON

Ampliando os estudos do curso, estou mudando os métodos da Controller do produto para receber e enviar JSON. Não estou conseguindo passar os dados para o model. Segue código:

JSON produto
{
    nome : "Bolo de chocolate"
    preco : 80.00,
    categoria_id : {
        id : 1,
        nome : "Lanches"
    }
}
class Produto extends Model {

    protected $table = 'produtos';
    public $timestamps = false;

    protected $fillable =
        array('nome', 'descricao', 'quantidade', 'valor', 'tamanho', 'categoria_id');

    public function categoria(){
        return $this->belongsTo('estoque\Categoria');
    }
}
ProdutoController 
// ....
public function adiciona(){

    $produto = Produto::create(Request::all());
    $produto->save();

    return redirect()
        ->action('ProdutoController@index')
        ->withInput(Request::only('nome'));
}
// ....
5 respostas

O que acontece Ricardo? nada? nenhuma mensagem de erro ou coisa parecida?

Segue o erro

FatalThrowableError in Grammar.php line 118:
Type error: Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given, called in C:\projetos\finance\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 665

Oi Ricardo, Experimenta só trocar a forma como o json está escrito, se for isso, te explico melhor o que está acontecendo, estou lendo o código do Laravel e pensando no que pode estar acontecendo internamente.

{
    "nome": "Bolo de chocolate"
    "preco" : 80.00,
    "categoria_id" : 1
}

funciona?

Dessa forma de você falou funciona.

solução!

O problema que acontece é o seguinte: O Laravel internamente ao receber seu request, analisa o tipo e manda pra um conversor, no caso do json, ele utiliza a função json_decode do próprio php que tem algumas regrinhas para poder conseguir transformar seu json em um array.

Na hora de construir a querie para o efetuar a operação no banco, o Laravel utiliza este array convertido. Como seu json estava em uma formatação não suportada pela função do php, ele não convertia corretamente e o array não era criado, mas sim uma string. Dessa forma o erro acontecia antes de criar a queria pra executar no banco, pois o método interno esperava um array e recebeu uma string. Entendeu?

Vou deixar aqui o link do json decode do PHP pra que você possa ler um pouco mais.

http://php.net/manual/en/function.json-decode.php