【发布时间】:2016-03-14 02:26:46
【问题描述】:
我解决这个问题的方法可能不是一个好主意。我必须决定是使用多个数据透视表还是只使用一个数据透视表并过滤附加和分离事件。
我有 4 个关于艺术家的模型。这些是;艺术家、场地、活动、艺术品。这些模型可以帮助我确定艺术家去过哪些活动、地点以及他展出了哪些艺术品。还有哪些艺术品出现在哪些场所或活动中,以便我可以轻松地为每个模型调用 Venues()、Artworks()、Events()、Artists(),我应该得到收藏。我创建了一个数据透视表。该表包含 4 列。
枢轴系统工作正常,但您可以在图像中看到创建了多行,其中单行可能很明显。艺术家可以带着艺术品去参加在场地举行的活动。因此,在这种情况下,您会期望一行没有任何 0。所以上面的表格会被折叠成大约 3 行。
艺术家模型:
class Artist extends Model {
...
public function Artworks (){
return $this->hasMany('App\Artwork','author_id');
}
public function Events (){
return $this->belongsToMany('App\Event', 'exhibits', 'artist', 'event');
}
public function Venues (){
return $this->belongsToMany('App\Venue', 'exhibits', 'artist', 'venue');
}
...
}
艺术品模型:
class Artwork extends Model {
...
public function Events (){
return $this->belongsToMany('App\Event', 'exhibits', 'artwork', 'event');
}
public function Venues (){
return $this->belongsToMany('App\Artist', 'exhibits', 'artwork', 'venue');
}
...
}
事件模型:
class Event extends Model {
...
public function Venue (){
return $this->belongsTo('App\Venue', 'venue_id');
}
public function Artists (){
return $this->belongsToMany('App\Artist', 'exhibits', 'event', 'artist');
}
public function Artworks (){
return $this->belongsToMany('App\Artwork', 'exhibits', 'event', 'artwork');
}
...
}
场地模型:
class Venue extends Model {
...
public function Events (){
return $this->hasMany('App\Event', 'venue');
}
public function Artists (){
return $this->belongsToMany('App\Artist', 'exhibits', 'venue', 'artist');
}
public function Artworks (){
return $this->belongsToMany('App\Artworks', 'exhibits', 'venue', 'artworks');
}
...
}
澄清一下;
对于艺术品:我应该能够知道艺术品在哪些活动和地点展出过。
对于艺术家:我应该能够知道艺术家在哪些活动和地点展示了他/她的作品
为活动准备:我应该能够了解该活动中的艺术作品和艺术家。
对于场地:我应该能够了解场地中的艺术家和艺术品。
当可以使用单行时,数据透视表会创建多行。艺术家可以参加活动场地来展示艺术品。
编辑: 这是关于优化表格的。艺术品可能已经作为关系附加到表中的事件。所以现在假设我想将艺术家附加到同一个事件 - 艺术品关系,如果我手动执行此操作,最好的方法是搜索事件在哪里有艺术品但没有艺术家并将艺术家附加到事件 -艺术品关系,而不是为艺术家与事件的关系和艺术家与艺术品的关系创建 2 个新行,而 Laravel 目前正在使用 attach()
【问题讨论】:
-
你能提供一些代码吗?到目前为止,您尝试过什么?
-
真正的问题是什么?
-
枢轴系统工作正常,除非您在图像中看到创建了多行,其中单行可能很明显。 艺术家可能会带着艺术品去某个场地举办的活动。我觉得,他必须重新考虑他的数据库结构。
-
我已经添加了我的代码示例。
标签: php laravel many-to-many