One to One Polymorphic relation

 Image


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    use HasFactory;
    protected $fillable =['url','imageable_id','imageable_type'];

    public function imageable(){
        return $this->morphTo();
    }
}

Post

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable =['name'];

    public function image(){
        return $this->morphOne(Image::class,'imageable');
    }
}


 User

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable =['name'];

 

    public function image(){
        return $this->morphOne(Image::class,'imageable');
    }
}


Create user image

 $user = $request->user('api');

            if ($request->has('profile_img')) {
                if (!is_null($user->image->first()->url)) {
                    $profile_img = storage_path("app/" . $user->image->first()->url);
                    if (file_exists($profile_img)) {
                        unlink($profile_img);
                    }
                }

                $data['url'] = $request->file('profile_img')
                    ->store('public/img/profile_img');
            }

          $user->image()->UpdateOrCreate([
            'imageable_id'=>$user->id
          ],$data);

Comments