我有一个有两张桌子的拍卖网站:拍卖和拍卖。拍卖和拍卖(属于拍卖)都可以包含图像。
从数据库的角度来看,我创建了一个名为images_auctions的表(具有拍卖ID的外键)和一个名为lots_images的表(具有该批次ID的外键)。
我的拍卖模型中也有以下内容:
class Auction extends Model
{
protected $table = 'auctions';
public function lots() {
return $this->hasMany(Lot::class);
}
public function images() {
return $this->hasMany(Image::class);
}
}
并且在Lots模型中,我有:
class Lot extends Model {
protected $table = 'lots';
public function auction() {
return $this->belongsTo(Auction::class);
}
public function images() {
return $this->hasMany(Image::class);
}
}
然后我想创建一个包含以下内容的Image模型:
class Image extends Model
{
protected $table = 'images';
public function auction() {
return $this->belongsTo(Auction::class);
}
public function lot() {
return $this->belongsTo(Lot::class);
}
}
是否可以有一个名为Images的模型同时引用Auction和Lot(使用belongsTo方法)。或者我应该创建两个模型(ImageAuction和ImageLot)来实现这个目标吗?
另外,从数据库的角度来看,是否有更好的方法而不是创建两个单独的图像表(images_auctions和images_lots)?
答案 0 :(得分:2)
是否有可能有一个名为Images的模型同时引用Auction和Lot。它称为多态关系。
的予。型号
I.1。批量模型
class Lot extends Model
{
public function auction() {
return $this->belongsTo(Auction::class);
}
public function images() {
return $this->morphMany(Image::class, 'imageable');
}
}
I.2。拍卖模式
class Auction extends Model
{
public function lots() {
return $this->hasMany(Lot::class);
}
public function images() {
return $this->morphMany(Image::class, 'imageable');
}
}
I.3。图像模型
class Image extends Model
{
public function imageable(){
return $this->morphTo();
}
}
<强> II。表格结构
auctions
id - integer
lots
id - integer
auction_id - integer
images
id - integer
imageable_id - integer
imageable_type - string
image_link - string
<强> III。实施例强>
id | imageable_id | imageable_type | image_link
1 | 1 | App\Lot | img1
2 | 2 | App\Auction | img2
<强> IV。通知强> 如果你不想让人头痛的话,你应该像上面一样方便地遵循Laravel的名字。