我想用Laravel创建一个CRUD应用程序,并提供以下场景:我们有一个矿井,在这个矿场中,各种卡车从一个矿坑中提取采矿材料,并通过一条道路将其存放在垃圾堆中。现在每条路都把一个区域和一个垃圾坑连接起来。因此,“道路No1”从“区域1”和“倾倒孔1”的材料。道路No2从“区域1”的材料以及可能处置它到“倾倒洞1”也。因此,区域和道路有一对多的关系,就像一个地区可以有很多道路,垃圾堆洞和道路应该有一对多的关系,就像一个垃圾坑从许多道路上得到材料一样。
想当然地认为,区域、道路和倾倒坑是三个不同的表,是否完全有必要像上面提到的那样在这三个表之间建立关系?如果是的话,我想知道这是否会在“道路”表中创建重复的值,以防用户希望看到道路上放置材料的转储点或道路来自的区域。例如,考虑下表:
+----+-------------+----------+-------+---------+---------------+
| id | route | distance | slope | area | dumpsite |
+----+-------------+----------+-------+---------+---------------+
| 2 | First route | 10000 | 20 | E12 | Big Dumpsite |
| 3 | Second route| 2000 | 15 | E12 | Huge Dumpsite |
| 4 | Third route | 2555 | 10 | E13 | Big Dumpsite |
+----+-------------+----------+-------+---------+---------------+正如您在area和dumpsite列中看到的那样,存在重复的值。
这个设计好吗?
发布于 2018-11-21 01:14:09
据我所知,你会像这样设置你的模型
class Area extends Model
{
public function roads() {
return $this->hasMany('App\Road');
}
// to access areas possible dumpsites
public function getDumpsitesAttribute()
{
return $this->roads->with('dumpsite')->get()->pluck('dumpsite')->unique();
}
}
class Road extends Model
{
public function area() {
return $this->belongsTo('App\Area');
}
public function dumpsite() {
return $this->belongsTo('App\Dumpsite');
}
}
class Dumpsite extends Model
{
public function roads() {
return $this->hasMany('App\Road');
}
// to access dumpsites possible area
public function getAreasAttribute()
{
return $this->roads->with('area')->get()->pluck('area')->unique();
}
}您的road表将有area_id和dumpsite_id
https://stackoverflow.com/questions/53402384
复制相似问题