我有一个posts表,一个post可能有一个媒体。它可以是一个视频或画廊。这很容易,我所做的就是建立一个多态关系,它起了作用。
+----------------------------------------------------------+|岗位|+------+-----------------+---------+----------+------------+|id | title | content | media_id | media_type|+------+-----------------+---------+----------+------------+|1|太棒了…|Rea…|10|视频|+------+-----------------+---------+----------+------------+|2|酷照片…|请参阅…|12|画廊|+------+-----------------+---------+----------+------------+|3|观看…|请参阅…|22|视频|+------+-----------------+---------+----------+------------+
问题是有些帖子没有媒体,多态关系将记录连接到其类型字段中指定的模型。
+----------------------------------------------------------+|岗位|+------+-----------------+---------+----------+------------+|id | title | content | media_id | media_type|+------+-----------------+---------+----------+------------+|1|太棒了…|Rea…|10|视频|+------+-----------------+---------+----------+------------+|2|酷照片…|请参阅…|12|画廊|+------+-----------------+---------+----------+------------+|3|观看…|请参阅…|22|视频|+------+-----------------+---------+----------+------------+|4|十大游戏…|播放…|0||+------+-----------------+---------+----------+------------+|5|你想要…|Buil…|0||+------+-----------------+---------+----------+------------+
将media_type设置为空会导致错误,因为它将搜索空字符串类。建立这种关系的最佳方式是什么?我应该和他们一起去一张假桌子吗(请不要)?或者有没有合适的方法来处理这个问题?
谢谢!
我认为您的问题的最佳解决方案是划分posts表和多态关系表。例如,Your posts表只包含post信息,relation表包含post_id和relationship信息,这样您就不需要关心媒体是否存在。像这样,
+----------------------------------|
| posts |
+------+-----------------+---------|
| id | title | content |
+------+-----------------+---------|
| 1 | Some Awesome... | Rea... |
+------+-----------------+---------|
| 2 | Cool Photos... | See... |
+------+-----------------+---------|
| 3 | Watch The... | See... |
+------+-----------------+---------|
+----------------------------------------+
| media |
+------+---------+----------+------------|
| id | post_id | media_id | media_type |
+------+---------+----------+------------|
| 1 | 1 | 10 | Video |
+------+---------+----------+------------|
| 2 | 2 | 12 | Gallery |
+------+---------+----------+------------|
| 3 | 3 | 22 | Video |
+------+---------+----------+------------|
介质模型
public function medias()
{
return $this->morphTo();
}
在Post模型中,它将与Media模型是一对一或一对多的关系(无论你喜欢什么)。
public function media()
{
return $this->hasMany('Media');
}
OR
public function media()
{
return $this->hasOne('Media');
}
在视频、图库模型中,它们与媒体模型具有多态性关系。
public function media()
{
return $this->morphMany('Media', 'medias');
}