【问题标题】:Laravel - Relations with multiple idsLaravel - 与多个 id 的关系
【发布时间】:2015-12-21 02:52:14
【问题描述】:

我有两张桌子:
1。 房间
2。 设施

Facilities 房间包含 id 和 varchar 列。
Room 表包含一个列 (facilities_id),其中显然是 facilities 表中的 id。在该列中,我有多个值,以逗号 (1,3,4) 分隔。

在它们之间建立关系的最佳方式是什么?类似于“belongsTo”关系,但具有多个 id。

【问题讨论】:

标签: php mysql laravel relational-database


【解决方案1】:

就像 Alexander M. 所说,如果你改变你的结构会更好。 e. g.:

Schema::create('facilities', function (Blueprint $table) {
    $table->increments('id');
    $table->string('column')->unique();
    $table->timestamps();
});

Schema::create('facility_room', function (Blueprint $table) {
    $table->integer('facility_id')->unsigned();
    $table->integer('room_id')->unsigned();

    $table->foreign('facility_id')->references('id')->on('facilities')
            ->onUpdate('cascade')->onDelete('cascade');
    $table->foreign('room_id')->references('id')->on('rooms')
            ->onUpdate('cascade')->onDelete('cascade');
});

Schema::create('rooms', function (Blueprint $table) {
    $table->increments('id');
    $table->string('column')->unique();
    $table->timestamps();
});

在您的设施模型中:

public function rooms()
{
    return $this->belongsToMany(Room::class);
}

在您的房间模型中:

public function facilities()
{
    return $this->belongsToMany(Facility::class);
}

在我们的应用程序中:

$room = Room::find($id);
$facilities = $room->facilities();

【讨论】:

    【解决方案2】:

    正如@jedrzej.kurylo 所说,您需要多对多关系。 String ids 作为逗号分隔的列表是错误的,它违反了First normal form,使用起来极其不方便。

    所以你应该重新考虑你的模型结构。

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2019-10-16
      • 2019-11-08
      • 2019-01-29
      • 2017-06-21
      • 1970-01-01
      相关资源
      最近更新 更多