首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel与Mysql的三表关系

Laravel与Mysql的三表关系
EN

Stack Overflow用户
提问于 2018-06-28 03:04:52
回答 1查看 97关注 0票数 1

我需要向MySql添加三个表,但是我不知道如何组织它们。

我的表格是:

  • apartment
  • floor
  • surface

还有我的亲戚们:

内部公寓可以有多个floor

  • apartment可以有多个surfaces

  • floor可以有多个apartment

  • floor可以有多个surfaces

  • surfaces可以有一层(在公寓的floors)

  • surfaces内部可以有一个公寓

曲面是在公寓之后进入的,所以我不能使用曲面楼层作为我的公寓楼层。

目前,我有公寓桌和落地桌,其中有一张枢轴桌(多对多)。

在Mysql中,处理这个问题的最好方法是什么?在拉瓦尔之后呢?

感谢您的帮助!

编辑:我到目前为止在laravel上的工作(只有落地桌和公寓桌)

在Apartment.php中:

代码语言:javascript
复制
public function floors(){
    return $this->belongsToMany('App\Models\Copro\Floor');
}

在Floor.php中:

代码语言:javascript
复制
public function apartments()
{
    return $this->belongsToMany('App\Models\Copro\Apartment');
}

编辑2:我到目前为止的迁移:

代码语言:javascript
复制
    Schema::create('surfaces', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('apartment_id')->unsigned()->index();
        $table->foreign('apartment_id')->references('id')->on('apartments')->onDelete('cascade');
        $table->integer('floor_id')->unsigned()->index();
        $table->foreign('floor_id')->references('id')->on('floors')->onDelete('cascade');
        $table->decimal('surface',65, 3);
    });

   Schema::create('apartments', function (Blueprint $table) {
        $table->increments('id');
        $table->string('nom');
    });

   Schema::create('floors', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('nom');
    });

    Schema::create('apartment_floor', function(Blueprint $table){
        $table->increments('id');
        $table->integer('apartment_id')->unsigned()->index();
        $table->integer('floor_id')->unsigned()->index();
        $table->foreign('apartment_id')->references('id')->on('apartments')->onDelete('cascade');
        $table->foreign('floor_id')->references('id')->on('floors')->onDelete('cascade');
    });
EN

回答 1

Stack Overflow用户

发布于 2018-06-28 03:43:13

我可以在Laravel中想到以下类型的关系,虽然我没有创建示例代码,但它应该会有所帮助。

公寓模型:

代码语言:javascript
复制
public function floors() {
    return $this->belongsTo('App\Models\Copro\Floor', 'floor_id', 'id');
} /* Many apartments belong to single floor. Single floor can have many apartments.*/

public function surfaces() {
    return $this->hasMany('App\Models\Copro\Surface', 'surface_id', 'id');
} /* Single apartment has many surfaces */

楼层模型:

代码语言:javascript
复制
public function apartments() {
    return $this->hasMany('App\Models\Copro\Apartment', 'apartment_id', 'id');
} /* A floor has many apartments */

public function surfaces() {
    return $this->hasMany('App\Models\Copro\Surface', 'surface_id', 'id');
} /* A floor has many surfaces */

曲面模型:

代码语言:javascript
复制
public function floor() {
    return $this->belongsTo('App\Models\Copro\Floor', 'floor_id', 'id');
} /* Surfaces belong to single floor */

public function apartment() {
    return $this->hasMany('App\Models\Copro\Apartment', 'apartment_id', 'id');
} /* Surfaces belong to single apartment */

然而,,如果你能在同一问题上提供表模式或迁移模式,答案将更加清晰。此外,您还可以提到您期望和想要执行的SQL查询类型。谢谢。希望这能有所帮助。

编辑:

我现在还没有安装PHP,但是下面的模式对我们是有用的,至少可以给我们更新更好的想法。

代码语言:javascript
复制
Floor:
    id
    flr_number

代码语言:javascript
复制
Apartment:
    id
    apt_number
    flr_id

代码语言:javascript
复制
Surface:
    id
    apt_id
    surface

地板将有许多通过表面的公寓。因此,我们可以在楼层模型中引入以下方法。

代码语言:javascript
复制
public function surfaces() {
    return $this->hasManyThrough(
        'App\Models\Copro\Surface',
        'App\Models\Copro\Apartment',
        'flr_id', /* Foreign key of Apartments table */
        'apt_id', /* Foreign key of Surfaces table */
        'id', /* Local key of Floors table */
        'id' /* Local key of Apartments table */
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51069802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档