Laravel - 与多个 ID 的关系

Laravel - Relations with multiple ids

我有两个table:
1。 房间
2。 设施

设施 房间包含 id 和一个 varchar 列。
Room table 包含一个列 (facilities_id),显然,id 来自设施table。在该列中,我有一个多值,用逗号 (1,3,4) 分隔。

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

正如@jedrzej.kurylo所说,你需要一个多对多的关系。字符串ids作为逗号分隔的列表是错误的,它违反了First normal form并且使用起来非常不方便。

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

就像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();