产品和图像的Laravel多态关系

时间:2016-07-28 19:41:04

标签: php laravel

我是Laravel的新手并试图弄清楚如何在产品及其图片之间使用多态关系。

我为Product和Image设计了两个模型,并相应地定义了关系,但在我的情况下,我使用了 object_id object_type 而不是 imageable_id imageable_type

这是我的产品和图像模型结构

class Product extends Model {

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'category_id', 'added_by', 'title',
        'product_unique_code', 'description', 'currency', 'product_status'
    ];

    /**
     * Get category this product belongs to
     * @return Category
     */
    public function category() {
        return $this->belongsTo(Category::class);
    }

    /**
     * Get user who added this product
     * @return User
     */
    public function addedByUser() {
        return $this->belongsTo(User::class);
    }

    /**
     * List of images
     * @return type
     */
    public function images() {
        return $this->morphMany(App\Image::class, 'object');
    }
}

class Image extends Model {

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'image_path', 'image_status', 'object_id', 'object_type', 
        'image_width', 'image_height'
    ];

    /**
     * Product own this image
     * @return Product
     */
    public function object() {
        return $this->morphTo();
    }
}

以下是要求,在创建新产品时会上传图像,例如图像会在保存产品之前上传,类似于在存储到数据库之前输入产品的详细信息,那么如何使用上述模型结构执行此任务? / p>

我还想要使用自定义多态类型而不是像object_type字段中的App \ Product这样的完整类名,正如我在 boot 中注册的 morphMap 我的 AppServiceProvider 的功能,但仍然使用 App \ Product 而不是'产品'

use Illuminate\Database\Eloquent\Relations\Relation;

Relation::morphMap([
    'products' => App\Product::class,
]);

0 个答案:

没有答案