Accessor / Laravel Mutator

0

Replacing "," with "." by Laravel's Mutator Returns empty and not saved to the bank.

ProductsController

namespace App\Http\Controllers;

use Prettus\Validator\Contracts\ValidatorInterface;
use Prettus\Validator\Exceptions\ValidatorException;
use App\Http\Requests\ProdutoCreateRequest;
use App\Http\Requests\ProdutoUpdateRequest;
use App\Repositories\ProdutoRepository;
use App\Validators\ProdutoValidator;
use App\Services\ProdutoService;

class ProdutosController extends Controller
{
    protected $repository;

    protected $service;

    public function __construct(ProdutoRepository $repository, ProdutoService $service)
    {
        $this->repository   = $repository;
        $this->service      = $service;
    }

        public function store(ProdutoCreateRequest $request)
    {
        $request = $this->service->store($request->all());
        $produto = $request['success'] ? $request['data'] : null ;

        session()->flash('success', [
            'success'   => $request['success'],
            'messages'  => $request['messages'],
        ]);
        return redirect()->route('admin.produtos.create');
    }   
}

ProductService

namespace App\Services;

use App\Repositories\ProdutoRepository;
use App\Validators\ProdutoValidator;
use Illuminate\Routing\Matching\ValidatorInterface;
use Exception;

class ProdutoService
{
    private $repository;
    private $validator;


    public function __construct(ProdutoRepository $repository, ProdutoValidator $validator)
    {
        $this->repository = $repository;
        $this->validator = $validator;
    }

    public function store($data)
    {
        try
        {
            $produto = $this->repository->create($data);
            return [
                'success'   => true,
                'messages'  => 'Produto cadastrado com Sucesso',
                'data'      => $produto,
            ];
        }
        catch(Exception $e)
        {
            dd($e);
            return [
                'success'   => false,
                'messages'  => 'Erro de execução',
            ];
        }
    }    
}

Product Model

namespace App\Entities;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Prettus\Repository\Contracts\Transformable;
use Prettus\Repository\Traits\TransformableTrait;

class Produto extends Model implements Transformable
{
    use TransformableTrait;
    use SoftDeletes;

    public $timestamps = true;

    protected $table = 'produtos';

    protected $fillable = [
        'titulo', 'status', 'console', 'genero', 'classificacao', 'custo', 'venda', 'desconto',
        'indatepromo', 'outdatepromo', 'quantidade', 'descricao', 'produtora', 'lancamento',
        'idioma', 'legenda', 'onplayers', 'offplayers', 'obs1', 'obs2', 'obs3', 'video',
    ];

    protected $hidden = ['status', 'custo'];

    /// CUSTO TROCA VIRGULA POR PONTO
    public function setCustoAttribute($value)
    {
        $this->attributes['custo'] = str_replace(",", ".", $value);
    }
    public function getCustoAttribute($value)
    {
        $this->attributes['custo'] = str_replace(".", ",", $value);
    }

    /// VENDA TROCA VIRGULA POR PONTO
    public function setVendaAttribute($value)
    {
        $this->attributes['venda'] = str_replace(",", ".", $value);
    }
    public function getVendaAttribute($value)
    {
        $this->attributes['venda'] = str_replace(".", ",", $value);
    }

    /// PROMOÇÃO TROCA VIRGULA POR PONTO
    public function setDescontoAttribute($value)
    {
        $this->attributes['desconto'] = str_replace(",", ".", $value);
    }
    public function getDescontoAttribute($value)
    {
        $this->attributes['desconto'] = str_replace(".", ",", $value);
    }
}

ProductRepository

namespace App\Repositories;

use Prettus\Repository\Contracts\RepositoryInterface;

/**
 * Interface ProdutoRepository.
 *
 * @package namespace App\Repositories;
 */
interface ProdutoRepository extends RepositoryInterface
{
    //
}
    
asked by anonymous 25.07.2018 / 07:32

1 answer

0

The implementation of Mutator (set) is correct

The Accessor (get) implementation should return a value

Replacing

public function getCustoAttribute($value)
    {
        $this->attributes['custo'] = str_replace(".", ",", $value);
    }

by

public function getCustoAttribute($value)
    {
       return  $this->attributes['custo'] = str_replace(".", ",", $value);
    }
    
25.07.2018 / 14:25