CRUDlex\MySQLData::hasManySet PHP Method

hasManySet() public method

public hasManySet ( $field, array $thatIds, $excludeId = null )
$thatIds array
    public function hasManySet($field, array $thatIds, $excludeId = null)
    {
        $thisField = $this->definition->getSubTypeField($field, 'many', 'thisField');
        $thatField = $this->definition->getSubTypeField($field, 'many', 'thatField');
        $thatEntity = $this->definition->getSubTypeField($field, 'many', 'entity');
        $entityTable = $this->definition->getServiceProvider()->getData($thatEntity)->getDefinition()->getTable();
        $queryBuilder = $this->database->createQueryBuilder();
        $queryBuilder->select('t1.`' . $thisField . '` AS this, t1.`' . $thatField . '` AS that')->from('`' . $field . '`', 't1')->leftJoin('t1', '`' . $entityTable . '`', 't2', 't2.id = t1.`' . $thatField . '`')->where('t2.deleted_at IS NULL')->orderBy('this, that');
        if ($excludeId !== null) {
            $queryBuilder->andWhere('t1.`' . $thisField . '` != ?')->setParameter(0, $excludeId);
        }
        $existingMany = $queryBuilder->execute()->fetchAll(\PDO::FETCH_ASSOC);
        $existingMap = array_reduce($existingMany, function (&$carry, $existing) {
            $carry[$existing['this']][] = $existing['that'];
            return $carry;
        }, []);
        sort($thatIds);
        return in_array($thatIds, array_values($existingMap));
    }