php artisan make:model Image -m
Hay que RESPETAR siempre la nomenclatura y los nombres del id y del type serán siempre el nombre del modelo+able_id y nombre del modelo+able_type
Por tanto en esa migration:
Schema::create('images', function (Blueprint $table) {
$table->string('url');
$table->unsignedBigInteger('imageable_id');
$table->string('imageable_type');
// crear una clave primaria compuesta (es relacion 1 a 1, no puede haber repetidos)
$table->primary(['imageable_id', 'imageable_type']);
$table->timestamps();
});
php artisan migrate
En app\Models\Image.php:
// ponerlo vacío el guardes para así poder meter masivamente desde tinker
protected $guarded = [];
public function imageable() {
return $this->morphTo();
}
En app\Models\User.php:
// relación uno a uno polimórfica
public function image() {
return $this->morphOne('App\Models\Image','imageable');
}
Abrir tinker para hacer pruebas:
php artisan tinker
use App\Models\Image;
Image::create(['url' => 'url 1','imageable_id' => 1, 'imageable_type' => 'App\Models\User']);
use App\Models\User;
$user = User::find(1);
// para acceder a la imagen de ese usuario
$user->image;
// add directamente a ese user una url
$user->image()->create(['url' => 'url edc']);
No hay comentarios:
Publicar un comentario