过滤并显示已经采用哪些整数以及哪些整数可用

时间:2015-10-21 10:34:00

标签: angularjs laravel

我在实施一种方法时遇到一些困难,这种方法可以看出已经采取了哪些数量,哪些数量已经采用。

我有一张名为图书

的表格
//..

$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

1 个答案:

答案 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_slotsbooks(可选)属于book属于bookshelf_slot

<强>更新

根据您提到的步骤:

  

用户选择书籍选择要分配给书籍的书架。书架应过滤哪些插槽已被占用以及哪些可用。用户选择可用的插槽并保存书籍。

当用户为bookshelf选择bookshelf时,book对象可以通过查询{{1}来显示其bookshelf的已占用/未占用状态的列表具有以下伪条件的表:slots不在bookshelf_slotsbookshelf_slots.id等于所选的books.bookshelf_slot_id的`id。

在Laravel中,假设您在bookshelf_slots.bookshelf_id模型中设置了bookshelf关系,您可以执行以下操作:

slots

然后,您可以执行以下操作来访问可用的广告位:Bookshelf