我是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,
]);