Curta e compartilhe
  • Laravel: morphMany e morphOne não pega o model pai, como resolver

    16
    setembro/16

    Permitir especificar a model.

    Problema:

    quando eu tenho:


    namespace Domain\Client;

    use Domain\Address\Address;
    use Illuminate\Database\Eloquent\Model;

    class Client extends Model {
    public function addresses()
    {
    return $this->morphMany(Address::class, 'owner');
    }
    }

    ----
    namespace Domain\Customer;

    class Customer extends \Domain\Client\Client
    {
    }




    O relacionamento addresses não funciona, porque a class morphMany pega o nome da class "Domain\Customer\Customer" e é necessário pegar neste caso o nome da class pai, que caso "Domain\Client\Client",

    Solução: estenda a class "Model" do Laravel e adicione os métodos:



    /**
    * Define a polymorphic one-to-one relationship.
    *
    * @param string $related
    * @param string $name
    * @param string $type
    * @param string $id
    * @param string $localKey
    * @param \Illuminate\Database\Eloquent\Model $parent
    * @return \Illuminate\Database\Eloquent\Relations\MorphOne
    */
    public function morphOne($related, $name, $type = null, $id = null, $localKey = null, Model $parent = null)
    {
    $instance = new $related;

    list($type, $id) = $this->getMorphs($name, $type, $id);

    $table = $instance->getTable();

    $localKey = $localKey ?: $this->getKeyName();

    if (is_null($parent)) {
    $parent = $this;
    }

    return new MorphOne($instance->newQuery(), $parent, $table.'.'.$type, $table.'.'.$id, $localKey);
    }

    public function attributesToArray()
    {
    $attributes = parent::attributesToArray();
    $dates = $this->getCastDates();
    foreach ($dates as $key) {
    if (!array_key_exists($key, $attributes)) {
    continue;
    }

    $attributes[$key] = Carbon::parse($attributes[$key])->format('Y-m-d');
    }



    Agora
    forma de solucionar com a alteração proposta seria informar isso na class pai, dessa forma:




    namespace Domain\Client;

    use Domain\Address\Address;
    use Seu-Model-Personalizado-com-os-metodos;

    class Client extends Seu-Model-Personalizado-com-os-metodos {
    public function addresses()
    {
    return $this->morphMany(Address::class, 'owner', null, null, null, new Self);
    }
    }



    Foi proposto no framework do Laravel uma PR, caso aceite não será necessário fazer isso, já terá a solução nativa.
    https://github.com/laravel/framework/pull/15471

    Fazer comentário

  • Laravel 5.3 do começo ao fim: Login com Angular (primeira tela)

    12
    setembro/16

    Você estava esperando para ver uma tela diferente do terminal? Pois então eis nossa primeira tela de login usando o Angular para autenticar.



    Fazer comentário

  • Laravel 5.3 do começo ao fim: Update, Atualizando o cadastro

    12
    setembro/16

    Continuando a série hoje vamos fazer atualização do cadastro.



    Fazer comentário

  • Laravel 5.3 do começo ao fim: FormRequest

    11
    setembro/16

    Hoje vamos aprender sobre o formrequest, o que ele é, para que ele serve? Ele serve para validar informações recebidas do usuário. Vamos ao vídeo saber como usar:




    Pacote utilizado para validar o CPF: github.com/resultsystems/validation

    Fazer comentário

  • Porque você nunca deve apagar um registro!

    11
    setembro/16

    Por que usar o SoftDeletes?

    Por que não devo apagar nada?

    Por que usar uma flag para informar que uma informação foi apagada ao invés de realmente apagar ela?
    Você pode marcar um registro como apagado e ele só não será mostrado, mas está lá no banco, intacto.

    Vivemos em um mudo rodeador de informações, empresas cruzam dados diariamente para conseguir seus objetivos.

    Eu gostaria de iniciar com algumas perguntas:

    Você acha que existe alguma rede social de graça?
    Você acha que existe realmente algo que as pessoas dão de graça na internet?
    Você acha que alguém cria uma rede social somente por ser bom e querer que as pessoas se comuniquem?

    Bom, sua resposta pode ser sim para todas elas, e pode realmente ser sim.

    Mas no mundo corporativos as empresas querem lucros, os milionários entram na jogadas de "A" e "B" buscando lucros, não que eles precisam, assim como você e eu sentimos alegria ao realizar algo bem sucedido, eles não fazem isso por serem mercenários, pode ser que alguns são, mas o lance é realização pessoal na maioria dos casos, penso eu, não tenho estatísticas para dizer isso.

    Quem são os maiores investidores dessas empresas?
    Como leigo eu diria que são os bancos.

    Mas antes de dizer porque você não deve apagar informações, vamos a alguns fatos.

    A vários anos fiz um cadastro de um ex-cliente, que nunca conheci pessoalmente, cadastrei em uma empresa de publicidade online, paguei o boleto, divulguei a empresa do cliente. Mas com um detalhe, fiz este cadastro com um email meu, mas coloquei o CPF do cliente, 10 anos mais tarde, sim aproximadamente 10 anos mais tarde, comecei a receber em meu email cobrança para o Fulano de Tal, meu ex-cliente no meu email, de um banco muito grande, só que nesta altura do campeonato eu já removi o CPF do cliente do meu email, coloquei o meu, nunca mais voltou o CPF dele, pois eu precisei alterar para fazer publicidade para mim mesmo.

    Eu te pergunto, o que você acha que aconteceu?
    Eu diria que primeiro nunca foi realmente trocado meu CPF dessa base de dados, ela foi passada para outro lugar, mas nunca trocado.
    Segundo como este banco teve acesso a este email com este CPF e este nome? Não cadastrei este cara em nenhum outro lugar senão nesta empresa de publicidade.

    Um segundo fato, não me recordo o tempo certo, mas meu falecido irmão, na data que escrevo isso tem mais de 6 anos que ele faleceu, e não sei quanto tempo tinha passado antes da morte dele, mas um belo dia ele queria pagar uma fatura de telefone, mas não conseguia a segunda via, solicitou que eu cadastrasse e imprimisse para ele no site da operadora, pois ele não tinha conhecimento para isso, eu fiz o cadastro, mas, mais uma vez, este cadastro foi feito no meu email, só que com o nome do meu irmão. Anos mais tarde, não sei quanto tempo mais tarde, comecei a receber propagandas no meu email, com o nome do meu irmão.

    Eu nunca mais fiz nenhum outro cadastro no nome do meu irmão usando meu email, o que acham que aconteceu? As empresas podem ter vendida a informação? Algum backbone pode ter interceptador e vendido?

    Ainda falando da morte do meu irmão, morreu junto com ele uma tia minha, e uma outra tia minha pediu para eu providenciar alguns papeis e resolver a questão do seguro junto a seguradora. E novamente fiz a mesma coisa, cadastrei tudo no nome da minha tia, só que com um email meu, não o mesmo, mas outro email.

    Algum tempo depois, spam neste email com o nome da minha tia.

    Mais um caso:
    Eu tive uma empresa da qual eu fui sócio, não sou sócio mais, vendi, sai da empresa, mas esta empresa depois que vendi quebrou, e ficou devendo para alguns bancos.

    Fiz um cadastro em uma operadora de telefone celular, em um email que não usava até este dia para cadastrar em nada sério, nunca tinha usado para nenhum site no qual exigia meu cpf, sempre coloca em site que eu duvidava se era sério ou não, mas um dia eu resolvi cadastrar em uma empresa de celular, coloquei meu CPF, etc... não me recordo bem, mas foi no prazo mais ou menos de 2 dias após fazer o cadastro nesta email, recebo cobrada da empresa que vendi no meu email, no email que nunca tinha usado para sites com eu deveria colocar meu nome real, único lugar que coloquei o nome real foi esta empresa de celular. Estranho não?

    E se me permite o último caso, tem um plano de uma operadora que dá direito de você usar ele pagando 30 centavos por dia e fazer quantas ligações quiser para qualquer telefone daquela operadora, acesso a internet por mais 30 centavos, e por mais 30 centavos você ainda tem sms ilimitado para qualquer operadora, pois bem, eu tenho um chip desse no meu nome, tinha um no nome da minha esposa, mas quando mudamos de estado então fiquei apenas com o meu, só que como é outro DDD, não uso para receber ligações, e gostaria de usar apenas um chip desse para fazer e receber ligações, conversei com um amigo que me autorizou a pedir um chip no outro estado que moro no nome dele e no CPF dele, inclusive recentemente ele teve que me mandar uma procuração para conseguir resgatar o chip que eu queria trocar para 4G. Pois bem, quem tem este número? Meu amigo, minha esposa, e eu. E sua mãe? Minha mãe me liga em um número fixo da cidade de onde eu sou, e a ligação cai em casa, ou no meu celular, ela nunca precisou saber meu celular.

    Mas o que tem de estranho nisso? Ninguém sabe o número, mas decidido que eu não retornaria mais para meu estado de origem, então resolvi que iria remover o cadastro do número antigo de alguns sites que me enviam token nele para o número novo, e manter apenas o número atual.

    Fiz em alguns sites, nem cheguei a terminar, alguns dias depois, recebo uma ligação: falo com fulano de tal (meu nome completo), é sobre a empresa tal. Então, cobrança da empresa que eu vendi.

    Não é um cruzamento de informação muito forte?
    Não tem valor estas informações?
    Quem paga tudo isso?
    Existe alguma coisa realmente de graça?

    Bom este tipo de atitude eu entendo que é ilegal venda de informações, agir da forma que aparentemente tudo indica houve venda das informações das pessoas, ,mas não posso afirmar.

    Eu não estou dizendo para você fazer coisas ilegais, nem incentivado esta prática, mas esta grandes empresas não apagam nada, e porque fazem isso? Você apaga, mas na verdade a informação só vai outro lugar, informações que podem ser usadas para ver o que você gosta, colocar um anúncio mais próximo de você aumentando a chance de você comprar um determinado produto.

    Agora pensa em questões técnicas, imagina um usuário apaga algo que não deveria, qual é mais fácil recuperar um registro no meio de um backup de TBs de informações, ou simplesmente usar uma flag no registro que informa se está apagada ou não? Usando uma flag você só tem que informar que o registro está ativo.

    Eu li algo em algum lugar que se você pedir ao Facebook tudo que eles tem de você, depois de alguns dias você recebe um cd na sua casa, inclusive com aquelas fotos que você apagou, comentários etc, mas nunca tentei fazer isso, então, não sei da veracidade, mas não duvido.

    Agora imagina você poder estudar o comportamento de compras de um cliente e poder vender mais para ele?

    Quer ver um caso legal e interessante para você começar a pensar?
    Segundo me falaram o Walmart pegou não sei quantos teras de informações e cruzou elas, e descobri que se colocar o produto X que não tem nada haver com o Y, ele será mais vendido, porque a maioria dos clientes que compram X, compra Y, e com isso as compras aumentaram.

    Você pode usar algo desse tipo para aumentar o lucro da empresa, para vender seu software, para ajudar seu cliente a ter mais lucro e ser mais competível no mercado, pense nisso.

    Você precisa gerar valor para seu cliente, gerar valor te valorizará mais.

    E se você usa o Laravel para programar, e não conhece a opção de softDelete, deveria conhecer.

    Fazer comentário

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 >>