我在实施一种方法时遇到一些困难,这种方法可以看出已经采取了哪些数量,哪些数量已经采用。
我有一张名为图书
的表格//..
$table->integer('bookshelf_id')->nullable()->unsigned();
$table->foreign('bookshelf_id')->references('id')->on('bookshelves')->onDelete('cascade')->onUpdate('cascade');
$table->tinyInteger('bookshelf_number')->nullable();
我还有一张名为书架
的桌子//..
$table->tinyInteger('number_of_slots');
所以步骤就像这样
用户选择一本书 选择要分配到的书籍的书架 架子应该过滤哪些槽已经被取出并且哪些可用。 用户选择可用的插槽并保存书籍。 这就是问题所在。
我想,当用户选择书架时,数据库会过滤所选书架的插槽,以及哪些插槽占用。
有人会告诉我实施此操作的最佳方式是什么?
我正在考虑编写一个函数,该函数获取所选书架的id并获取属性' number_of_slots' ..但现在呢?我如何确保这些插槽被其他一些书带走?
PS。我正在使用angularjs和laravel 5
更新
根据以下答案的描述,我在我的例子中做了以下内容。
只是要明确:下面的数据库表。
- 书籍 - >的板 bookshelf_slots - >的 container_slots 书架 - >的 plate_containers
所以这就是我做的......
在我的牌照表格中,我有以下内容
$table->integer('container_slot_id')->nullable()->unsigned();
$table->foreign('container_slot_id')->references('id')->on('container_slots')->onDelete('cascade')->onUpdate('cascade');
在 Plate 模型中我有
public function containerSlot()
{
return $this->belongsTo('App\Models\ContainerSlot');
}
我的 container_slots 表格如下所示
$table->increments('id');
$table->integer('slot_number');
$table->integer('plate_container_id')->unsigned();
$table->foreign('plate_container_id')->references('id')->on('plate_containers')->onDelete('cascade')->onUpdate('cascade');
container_slots 模型看起来像这样。
public function plate()
{
return $this->hasMany('App\Models\Plate');
}
public function plateContainer()
{
return $this->belongsTo('App\Models\PlateContainer');
}
我的 plate_containers 表格如下所示。
$table->increments('id');
$table->string('name', 25)->unique();
$table->tinyInteger('number_of_slots');
模型, PlateContainer
public function containerSlot()
{
return $this->hasMany('App\Models\ContainerSlot');
}
这实际上很有效..好吧。我得到一个空数组。
收集{#337▼#items:[]}
这是我在路线中称呼它的方式。
$bookshelfWithAvailableSlots = PlateContainer::with(['containerSlot' => function ($q) {
$q->join('plates', 'plates.container_slot_id', '<>', 'container_slots.id');
}])->find(3);
dd( $bookshelfWithAvailableSlots->containerSlot);
更新#2 - 包含数据
起初我的意见略有不同。但要知道这就是它的回归。
{
"id": 1,
"name": "Dr. Zechariah Effertz",
"number_of_slots": 4,
"description": "Nesciunt sint officiis est perspiciatis odio molestiae.",
"material": "silicon",
"plate_container_type_id": 5,
"equipment_status_codes_id": 6,
"storage_locations_id": 5,
"created_at": "2015-10-25 18:22:33",
"updated_at": "2015-10-25 18:22:33",
"container_slot": [
{
"id": 1,
"slot_number": 8,
"plate_container_id": 1,
"created_at": "2015-10-25 18:22:34",
"updated_at": "2015-10-25 18:46:25",
"serial_number": 41,
"supplier_id": 5,
"equipment_status_code_id": 1,
"plate_type_id": 5,
"coating_id": 1,
"geometry_id": 5,
"document_id": 1,
"metrology_data_file_id": 5,
"project_id": 1,
"plate_quality_id": 2,
"crc-code": "5",
"reason": "nice",
"wafer_id": 3,
"container_slot_id": 20,
"data_representation_id": 1,
"xray_measurement_id": 3,
"deleted_at": null
},
{
"id": 1,
"slot_number": 5,
"plate_container_id": 1,
"created_at": "2015-10-25 18:22:34",
"updated_at": "2015-10-25 18:46:25",
"serial_number": 41,
"supplier_id": 5,
"equipment_status_code_id": 1,
"plate_type_id": 5,
"coating_id": 1,
"geometry_id": 5,
"document_id": 1,
"metrology_data_file_id": 5,
"project_id": 1,
"plate_quality_id": 2,
"crc-code": "5",
"reason": "nice",
"wafer_id": 3,
"container_slot_id": 20,
"data_representation_id": 1,
"xray_measurement_id": 3,
"deleted_at": null
},
类似这样的事情
$platecontainer = PlateContainer::with(['containerSlot' => function ($q) {
$q->join('plates', 'plates.container_slot_id', '<>', 'container_slots.id');
}])->find(1);
return $platecontainer->number_of_slots;
将返回4
答案 0 :(得分:0)
您需要在那里添加另一个表用于插槽。类似于bookshelf_slots
的{{1}}字段,您可以检查该广告位是否已被占用。
slot_number
此结构被描述为+-------------------+-----------------+-----------------+
| books | bookshelf_slots | bookshelves |
+-------------------+-----------------+-----------------+
| id | id | id |
| bookshelf_slot_id | bookshelf_id | number_of_slots |
| ... | slot_number | ... |
+-------------------+-----------------+-----------------+
有许多插槽(bookshelves
),可以容纳许多bookshelf_slots
或books
(可选)属于book
属于bookshelf_slot
。
<强>更新强>
根据您提到的步骤:
用户选择书籍选择要分配给书籍的书架。书架应过滤哪些插槽已被占用以及哪些可用。用户选择可用的插槽并保存书籍。
当用户为bookshelf
选择bookshelf
时,book
对象可以通过查询{{1}来显示其bookshelf
的已占用/未占用状态的列表具有以下伪条件的表:slots
不在bookshelf_slots
且bookshelf_slots.id
等于所选的books.bookshelf_slot_id
的`id。
在Laravel中,假设您在bookshelf_slots.bookshelf_id
模型中设置了bookshelf
关系,您可以执行以下操作:
slots
然后,您可以执行以下操作来访问可用的广告位:Bookshelf
。