Laravel-与多个id的关系


Laravel - Relations with multiple ids

我有两个表:
1.房间
2.设施

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

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

正如Alexander M.所说,如果你改变你的结构会更好。例如:

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

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

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