/** * @inheritdoc */ public function getRandomIdsNotInPivot(array $entities, array $idEntities, array $ids, $count) { // the table to retrieve ids from $table = last($entities); $pivotTable = $this->tableHelper->getTable($entities); $pivotColumn = $this->tableHelper->getLastEntityAsIdColumnName($entities); $columnNames = $this->tableHelper->getIdColumnNames($entities, $idEntities); if (count($entities) === count($ids)) { array_pop($ids); } $pivotWhereJoinColumns = array_combine($columnNames, $ids); return $this->db->getRandomIdsFromTableWhereNotInPivot($table, $pivotTable, $pivotColumn, $count, $pivotWhereJoinColumns); }
function it_gets_random_ids_for_an_entity_that_are_not_in_a_pivot(TableFetcher $tableFetcher, TableHelper $tableHelper) { $entities = ['sites', 'products', 'images']; $idEntities = ['sites', 'products']; $table = 'images'; $pivotColumn = 'image_id'; $pivot = 'image_product_site'; $ids = [1, 2]; $imageId = [5]; $columns = ['site_id', 'product_id']; $count = 2; $tableHelper->getLastEntityAsIdColumnName($entities)->shouldBeCalled()->willReturn($pivotColumn); $tableHelper->getTable($entities)->shouldBeCalled()->willReturn($pivot); $tableHelper->getIdColumnNames($entities, $idEntities)->shouldBeCalled()->willReturn($columns); $tableFetcher->getRandomIdsFromTableWhereNotInPivot($table, $pivot, $pivotColumn, $count, array_combine($columns, $ids))->shouldBeCalled()->willReturn($imageId); $this->getRandomIdsNotInPivot($entities, $idEntities, $ids, $count); }