Angularjs 过滤并显示哪些整数已被接受,哪些可用

Angularjs 过滤并显示哪些整数已被接受,哪些可用,angularjs,laravel,Angularjs,Laravel,我在实现一种方法时遇到了一些困难,这种方法可以看到已经使用了哪些数字,哪些没有 我有一张名为“书籍”的桌子 //.. $table->integer('bookshelf_id')->nullable()->unsigned(); $table->foreign('bookshelf_id')->references('id')->on('bookshelves')->onDelete('cascade')->onUpdate('cascade'

我在实现一种方法时遇到了一些困难,这种方法可以看到已经使用了哪些数字,哪些没有

我有一张名为“书籍”的桌子

//..

$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');
我还有一张桌子叫书架

//..

$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');
步骤是这样的

用户选择一本书 选择要指定给的书本的书架 货架应过滤哪些插槽已占用,哪些可用。 用户选择可用插槽并保存书本。 问题来了

我想,当用户选择书架时,db会过滤所选书架上有哪些可用的插槽以及哪些插槽被占用

有人能告诉我什么是最好的方法来实现这一点吗

我正在考虑编写一个函数,该函数获取所选书架的id,并获取属性“number\u of_slots”。。但是现在呢?我怎样才能确保这些插槽被其他书籍占用

另外,我正在使用angularjs和laravel 5

更新

根据下面描述的答案,我对我的例子做了如下操作

需要明确的是:下面的DB表

  • 书本->板块 书架槽->容器槽 书架->板式容器
这就是我所做的

在我的表中,我有以下内容

  $table->integer('container_slot_id')->nullable()->unsigned();
  $table->foreign('container_slot_id')->references('id')->on('container_slots')->onDelete('cascade')->onUpdate('cascade');
板中型号我有

  public function containerSlot()
    {
      return $this->belongsTo('App\Models\ContainerSlot');
    }
我的容器\u插槽表如下所示

  $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');
  $platecontainer = PlateContainer::with(['containerSlot' => function ($q) {
      $q->join('plates', 'plates.container_slot_id', '<>', 'container_slots.id');
    }])->find(1);

    return $platecontainer->number_of_slots;
容器\u插槽模型如下所示

  public function plate()
{
  return $this->hasMany('App\Models\Plate');
}

public function plateContainer()
{
  return $this->belongsTo('App\Models\PlateContainer');
}
   $table->increments('id');
   $table->string('name', 25)->unique();
   $table->tinyInteger('number_of_slots');
我的盘子容器桌子看起来像这样

  public function plate()
{
  return $this->hasMany('App\Models\Plate');
}

public function plateContainer()
{
  return $this->belongsTo('App\Models\PlateContainer');
}
   $table->increments('id');
   $table->string('name', 25)->unique();
   $table->tinyInteger('number_of_slots');
和型号,PlateContainer

  public function containerSlot()
    {
       return $this->hasMany('App\Models\ContainerSlot');
    }    
这确实奏效了。。嗯,大部分是这样。我得到一个空数组

集合{#337▼ #项目:[]}

这是我在路线上的称呼

  $bookshelfWithAvailableSlots = PlateContainer::with(['containerSlot' => function ($q) {
    $q->join('plates', 'plates.container_slot_id', '<>', 'container_slots.id');
}])->find(3);

  dd( $bookshelfWithAvailableSlots->containerSlot);
像这样的

  $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');
  $platecontainer = PlateContainer::with(['containerSlot' => function ($q) {
      $q->join('plates', 'plates.container_slot_id', '<>', 'container_slots.id');
    }])->find(1);

    return $platecontainer->number_of_slots;
$platecontainer=platecontainer::with(['containerSlot'=>函数($q){
$q->join('plates','plates.container\u slot\u id','container\u slot.id');
}])->发现(1);
返回$platecontainer->插槽数量;

将返回
4

您需要在此处为插槽添加另一个表。类似于
bookshelf\u slots
,它将有一个
slot\u number
字段,您可以检查该插槽是否已被占用

+-------------------+-----------------+-----------------+
|       books       | bookshelf_slots |   bookshelves   |
+-------------------+-----------------+-----------------+
|        id         |        id       |        id       |
| bookshelf_slot_id | bookshelf_id    | number_of_slots |
| ...               | slot_number     | ...             |
+-------------------+-----------------+-----------------+
这种结构被描述为
书架
有许多插槽(
书架插槽
),可以容纳许多
书籍
,或者
书籍
(可选)属于属于
书架的
书架插槽

更新

根据您提到的步骤:

用户选择一本书选择要分配给书架的书架应过滤哪些插槽已占用,哪些可用。用户选择可用插槽并保存书本

当用户为
书籍
选择
书架时,
bookshelf
对象可以通过以下伪条件查询
bookshelf\u slots
表来显示其
slots
的已占用/未占用状态列表:
bookshelf\u slots.id
不在
图书中。bookshelf\u slots id
bookshelf\u slots。bookshelf\u id
等于所选的值
书架
的'id'

在Laravel中,假设您在
书架
模型中设置了
插槽
关系,您可以执行以下操作:

$bookshelfWithAvailableSlots = Bookshelf::with(['slots' => function ($q) {
    $q->join('books', 'books.bookshelf_slot_id', '<>', 'bookshelf_slots.id');
}])->find($bookshelfId);
$bookshelfWithAvailableSlots=Bookshelf::with(['slots'=>函数($q){
$q->join('books','books.bookshelf\u slot\u id','bookshelf\u slot.id');
}])->查找($书架FID);

然后,您可以通过执行以下操作访问可用插槽:
$bookshelfWithAvailableSlots->slots

是否有某种伪代码,我可以按照这些步骤进行操作,以及如何实现这些步骤?它几乎起到了作用。我更新了问题中的代码。请你引导我通过它好吗。。怎么了?非常感谢。你能在数据库中为那些表添加数据吗?我已经有一些数据了。但我想一定是出了什么问题。现在我修复了它,我有了上面更新的代码。我想这行得通吧?