Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Nesses casos eu uso eventos do Model
- No seu caso é um fornecedor tem que ter o endereço, e fornecedor->endereço_id não pode ser null, certo?
- Faz assim no model:
- */
- class Fornecedor extends Model {
- // dessa forma você pode chamar o método endereço na classe Fornecedor
- // Ex.:
- // $fornecedor = Fornecedor::first();
- // $fornecedor->endereco
- // DOC REF https://laravel.com/docs/7.x/eloquent-relationships#one-to-one
- public function endereco()
- {
- return $this->hasOne(Endereco::class);
- }
- // criar um attribute para guardar o endereço temporariamente
- // PS.: eu sei que tá fora de lugar, é apenas seguir a ordem do raciocício
- private $enderecoQueue = [];
- // cria um mutator
- // DOC REF: https://laravel.com/docs/7.x/eloquent-mutators#defining-a-mutator
- public function setEnderecoAttribute(array $value)
- {
- $this->enderecoQueue = $value;
- }
- // nesse passo a gente vai ouvir os eventos deste model
- // DOC REF https://laravel.com/docs/7.x/eloquent#events
- // Você pode criar um Observer, mas para simplificar vou usar Closures
- //
- // como esses eventos funcionam
- // após você chamar o método save() do model tanto para criar o registro no banco quanto para atualizar são disparados alguns eventos
- // Exemplos:
- // o evento "creating" é chamado antes de criar o registro no banco de dados
- // o evento "created" é chamado depois de criar o registro no banco de dados
- protected static function booted()
- {
- // criar o endereço antes de criar o fornecedor
- static::creating(function (self $fornecedor) {
- // pega uma nova instancia do model Endereco com base no relacionamento definido no model Fornecedor
- $endereco = $fornecedor->endereco()->getRelatedModel();
- $endereco->create($fornecedor->enderecoQueue);
- $fornecedor->endereco_id = $endereco->id;
- });
- }
- }
- class MeuController extends Controller {
- /*Agora você pode fazer assim*/
- public function store(Request $request) {
- Fornecedor::create([
- 'cnpj'=> $request->cnpj,
- 'razao_social'=> $request->razao_social ,
- 'endereco'=> [
- 'cidade'=> $request->cidade,
- 'logradouro'=> $request->logradouro,
- ],
- ]);
- }
- }
- //PS.: Eu não testei o código: eu apenas apresentei a lógica com exemplo de código
Add Comment
Please, Sign In to add comment