Laravel's morphOne / morphTo возвращает ноль - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь отобразить несколько изображений для одного продукта. Я попытался создать обычные отношения hasMany / ownTo, но мой запрос дублирует продукты для каждого изображения, которое ему принадлежит. Поэтому я решил использовать полиморфное отношение morphOne. Я прочитал кучу вопросов / ответов здесь и в целом по Google и не смог найти свой ответ, или, может быть, я просто не понял, как все работает.

Следуя документации Laravels, у меня есть следующее:

Product model

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

Image model

    protected $fillable = [
        'image', 'imageable_id', 'imageable_type'
    ];

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

Image migration

        Schema::create('images', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image')->nullable();
            $table->integer('imageable_id')->unsigned();
            $table->string('imageable_type');
            $table->timestamps();
        });

Database image

https://ibb.co/bd8VsCK

Image Factory

    $noteable = App\Image::class;

    return [
        'image' =>$faker>image(storage_path('app/public/products'),400,300,'',false), 
        'imageable_type' => $noteable,
        'imageable_id' => $faker->numberBetween(1,20),
    ];

Может быть, я что-то упустил, или, возможно, этот подход не подходит для того, что я хочу. Я довольно новичок в Laravel, поэтому любая помощь будет отличной. Спасибо!

1 Ответ

0 голосов
/ 11 июня 2019

Я думаю, что это очень сложное решение, которого вы пытаетесь достичь.То, что я делал ранее в своих проектах, - это две таблицы, следовательно, две модели php, одна из которых будет Product.php и ProductItem.php (Images);

class Product extends Model 
{
    protected $guarded = [];

    public function images() {
        return $this->hasMany(ProductImage::class);
    }

}

class ProductItem extends Model 
{
    protected $guarded = [];
}

в методах вашего контроллера.вы бы запросили ваши продукты будут

public function index() 
{
    $products = Product::with('images')->get();
}

ваши схемы базы данных будут

products table 
    - name
    - id
    - ....

product_items table
    - id
    - product_id
    - path or image or name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...