Question: Laravel 5.4 Relations are not loading inside Model boot method

Question

Laravel 5.4 Relations are not loading inside Model boot method

Answers 0
Added at 2017-11-08 13:11
Tags
Question

I have a model named 'Poll'. Inside Poll model I defined a boot method like follows:

public static function boot()
{
    parent::boot();

    self::created(function($model){
       // dd($model);
       $speakers = $model->speakers()->get();
       // dd($speakers);

       // What I want to do here is: create poll options relation from speakers as follows
       // $poll->poll_options()->create([
       //     'option' => $speaker->name,
       // ]);
    }
}

I am adding the speakers relation and it is working perfect.

But inside this boot method, inside self::created if I tried to get the speakers relation, it is always empty (dd($speakers) line). Is it because of the boot method runs just after the model is saved into DB and the relations not at all saved?

I am getting newly created model in the line: dd($model) mentioned in the code.

UPDATE

I tried with events also. My Poll Model:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Backpack\CRUD\CrudTrait;
use Cookie;
use App\Events\PollCreated;

class Poll extends Model
{
  ........
  protected $events = [
        'created' => PollCreated::class,
    ];
  .......

  public function speakers()
  {
    return $this->belongsToMany('App\Models\Speaker','poll_speaker','poll_id','speaker_id');
  }
}

app/Events/PollCreated.php:

namespace App\Events;

use App\Models\Poll;
use Illuminate\Queue\SerializesModels;

class PollCreated
{
  use SerializesModels;

  public $poll;

  /**
   * Create a new event instance.
   *
   * @param  Poll  $poll
   * @return void
   */
  public function __construct(Poll $poll)
  {
      // $this->poll = $poll;
      $event = $poll->event()->first();
      // dd($event);
      // dd($poll->speakers()->get());
      // dd($poll->load('speakers'));
  }
}

Here also I am not getting speakers, in the line: dd($poll->speakers()->get());

my Speaker model:

    <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Model;
    use Backpack\CRUD\CrudTrait;

    class Speaker extends Model
    {
    use CrudTrait;
    ……..

        public function polls()
        {
            return $this->belongsToMany('App\Models\Poll');
        }
    ……..
    }
Answers to

Laravel 5.4 Relations are not loading inside Model boot method

Source Show
◀ Wstecz