lundi 19 août 2019

Can't access pivot model's id attribute inside of the static::saved() method in Laravel

I can't access pivot model's id attribute. I have one pivot model PivotModel and two models that are connected through this pivot model

ModelA class:

public function modelB()
{
    return $this->belongsToMany(ModelB::class, 'model_a_model_b', 'model_a_id', 'model_b_id')
        ->using(PivotModel::class)
        ->withPivot('id', 'prop_1', 'prop_2');
}

ModelB class:

public function modelA()
{
    return $this->belongsToMany(ModelA::class, 'model_a_model_b', 'model_b_id', 'model_a_id')
        ->using(PivotModel::class)
        ->withPivot('id', 'prop_1', 'prop_2');
}

PivotModel:

use Illuminate\Database\Eloquent\Relations\Pivot;

class PivotModel extends Pivot
{
    public $incrementing = true;

    public static function boot() {

        parent::boot();

        static::saved(function ($model) {
            dump($model->id);
            dump($model->toArray());
        });
    }
}

Pivot table migration file

Schema::create('model_a_model_b', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('model_a_id');
    $table->unsignedInteger('model_b_id');
    $table->string('prop_1');
    $table->string('prop_2');

    $table->unique(['model_a_id', 'model_b_id'], 'model_a_id_model_b_id');

    $table->foreign('model_a_id')
        ->references('id')->on('model_a')
        ->onDelete('cascade')
        ;

    $table->foreign('model_b_id')
        ->references('id')->on('model_b')
        ->onDelete('cascade')
        ;

    $table->timestamps();
});

I assume this should work. This is from the official documentation for Laravel 5.8

Custom Pivot Models And Incrementing IDs If you have defined a many-to-many relationship that uses a custom pivot model, and that pivot model has an auto-incrementing primary key, you should ensure your custom pivot model class defines an incrementing property that is set to true.

/**
 * Indicates if the IDs are auto-incrementing.
 *
 * @var bool
 */
public $incrementing = true;

I can only access the prop_1 and prop_2 properties but not the id property.

The id is null

dump($model->id); 

and the toArray() only shows other props but not the id

dump($model->toArray());



from Newest questions tagged laravel-5 - Stack Overflow https://ift.tt/30oAV64
via IFTTT

Aucun commentaire:

Enregistrer un commentaire