laravel关系

guicsvcw  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(264)

我想用laravel创建一个crud应用程序,使用以下场景:我们有一个矿井,其中各种卡车从一个采矿孔中取出采矿材料,通过一条道路将其存放在一个倾倒孔中。现在每条路都连接着一个有垃圾坑的区域。因此,“1号公路”从“1区”提取材料并排放到“1号倾倒坑”。2号公路也会从“1区”运走材料,并可能将其处理到“1号倾倒坑”。因此,区域和道路有一对多的关系,就像一个区域可以有多条道路,而带有道路的垃圾坑也应该有一对多的关系,就像一个垃圾坑从多条道路获得材料一样。
想当然地,区域、道路和垃圾坑是三个不同的表,是否完全有必要在上述三个表之间建立关系?如果是的话,我想知道这是否会在roads表中创建重复的值,以防用户希望看到一条道路将材料放置到的垃圾场或道路来自的区域。例如,考虑下表:

+----+-------------+----------+-------+---------+---------------+
| 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列中看到的那样,存在重复的值。
这个设计好吗?

xmjla07d

xmjla07d1#

据我所知,你会这样设置你的模型

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 这张table应该 area_id 以及 dumpsite_id

相关问题