我有两个表:
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作为逗号分隔的列表是错误的,它违反了第一范式,使用起来非常不方便。
所以你应该重新思考你的模型结构。