7
respostas

Converter array em Objeto

Olá boa tarde!

Gostaria de saber como converto uma matriz de array em um objeto do tipo especifico.

Exemplo:

retornou um array

[
    {
        id: "4",
        funcao_id: "1",
        nome: "Wesley Gomes",
        email: "email@gmail.com",
        descricao: "cara gente fina...",
        status: "1"
    }
]

como converto essa array em um objeto do tipo especifico??

7 respostas

Darley, boa tarde!

Cara, tudo depende de que tipo de objeto você precisa.

Se for um objeto genérico, poderia utilizar um modificador de tipo, assim:

$meuArray = [1,2,3];

$objeto = (object)$meuArray;

Isso fará com que o array seja um objeto do tipo stdClass, que é bem genérico.

Estes são os modificadores atuais do PHP:

(int), (integer) - molde para inteiro
(bool), (boolean) - converte para booleano
(float), (double), (real) - converte para número de ponto flutuante
(string) - converte para string
(array) - converte para array
(object) - converte para objeto
(unset) - converte para NULL (PHP 5)
(binary) e o prefixo b foram adicionados no PHP 5.2.1

Segue a documentação: http://php.net/manual/pt_BR/language.types.type-juggling.php

Agora se você precisa de um tipo específico, ai é outra história.

Preciso de um tipo especifico no meu caso do tipo Colaborador.

Estou usando o DB do laravel pra fazer a consulta.

ex

        $email = Request::only('email');
        $result = DB::table('tb_colaborador')->where('email', '=', $email)->get();

preciso que retorne um objeto do tipo Colaborador pois tenho que pegar a função que está em outra tabela como posso fazer?

Neste caso, não há como fazer a conversão direta.

No caso de classes do Laravel, e na maioria dos casos. Você somente consegue um objeto de tipo específico, utilizando o construtor deste objeto, ou seja.

$teste = new Teste;

Imagine que cada objeto pode possuir uma dependência de outros objetos, eles podem ser criados com base em uma classe abstrata, etc...

E até mesmo, que geralmente ao invocar o construtor de um objeto, outros itens podem ser disparados no sistema, como definição de conexão e coisas do tipo.

O máximo que você pode fazer, se for possível para o objeto que você tem, é claro.

Seria instanciar um objeto e atualizar os atributos depois.

$teste = new Teste;
$teste->nome = $nome;

Mas tudo vai de caso a caso, isso não será possível com qualquer objeto a qualquer momento.

O ideal é que você crie um objeto da classe que você precisa e carregue ele com seu array, pois a classe é quem devem ditar como os dados se comportam.

Isto pode ser feito no proprio construtor ou utilizando os Setters da classe.

Crie um Model php artisan make:model Colaboradores

Aponte para a tabela existente:

namespace App;

class Colaboradores extends Model
{
    protected $table      = 'tb_colaborador';

Busque o colaborador:

$result = Colaboradores::where('email', '=', $email)->first();

Observe que mudei get() para first(), que vai retornar o objeto daquele Colaborador com o email (supondo que seja um campo UNIQUE).

O problema é que preciso retornar dados de outra tabela que está ligada a essa como função do colaborador. Com essa consulta ai de cima retorna assim.

[
    {
        id: "4",
        funcao_id: "1",
        nome: "Wesley Gomes",
        email: "email@gmail.com",
        descricao: "cara gente fina...",
        status: "1"
    }
]

mas preciso que traga os dados da funcao_id.

Se não for o trecho que vou escrever a seguir, então não entendi o que você precisa rsrs

No seu model, inclua algo assim:

protected $appends = ['funcao'];

public function getFuncaoAttribute()
{
    return Funcao::find($this->funcao_id);
}

O resultado será um array com o objeto Colaborador, e uma propriedade 'funcao', com o objeto Funcao daquele funcao_id que passou.

Lembrando que o Eloquent tem o método toArray() para converter a Collection.