morphTo и помощью методов hasmany что Laravel

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

у меня есть продукт, который принадлежит к пользователя, но пользователь может иметь много продуктов. Но продукт также может иметь много людей, делающих предложение по этому продукту так;

class Product extends Model
{
    public function user(){
        return $this->belongsTo('AppUser');
    }
    public function offer(){
        return $this->hasMany('AppOffer');
    }

но продукт также может иметь различные подтипы продукта, например, один может быть транспортным средством или мобильным телефоном, каждый с разными столбцами в моей миграции, поэтому я предполагаю, что мне нужно морфинг много

In Product.php

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

на Vehicle.php

public function products()
{
  return $this->morphMany('AppProduct', 'imageable');
}

однако, при вызове:

$product = Product::findOrFail($id);

Я получаю null, когда я пытаюсь сделать что-то вроде $product->vehicle

Я добавить ID машины в базе данных на imageable_id на столе продуктов, и imageable тип к "кораблю" на таблице продуктов тоже.

что я здесь делаю не так?

1 ответов


все выглядит правильно, вы просто должны получить доступ к нему через imageable:

$product = Product::findOrFail($id);
return $product->imageable;

С фреймворк Laravel документация:

вы также можете получить владельца полиморфного отношения из полиморфная модель путем доступа к имени метода, который выполняет призыв к morphTo.

в вашем случае метод, который выполняет вызов morphTo - Это печати.