Laravel在CRUD应用程序中的关系

时间:2018-11-20 22:12:15

标签: mysql laravel

我要在以下情况下使用Laravel创建CRUD应用程序:  我们有一个矿山,各种各样的卡车从矿井中提取采矿材料,然后通过一条道路将其存放在一个垃圾场中。现在,每条道路都将一个区域与一个排泄孔相连。因此,“ 1号道路”从“ 1区”取料并放入“排料孔1”中。 2号道路也从“区域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列中看到重复的值。

这个设计好吗?

1 个答案:

答案 0 :(得分:0)

据我了解,您将像这样设置模型

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_iddumpsite_id