DatabasePresenceVerifier.php 1.57 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1 2 3
<?php

namespace Jenssegers\Mongodb\Validation;
4 5 6 7 8

class DatabasePresenceVerifier extends \Illuminate\Validation\DatabasePresenceVerifier
{
    /**
     * Count the number of objects in a collection having the given value.
Jens Segers's avatar
Jens Segers committed
9 10 11 12 13 14
     * @param string $collection
     * @param string $column
     * @param string $value
     * @param int $excludeId
     * @param string $idColumn
     * @param array $extra
15 16 17 18 19 20
     * @return int
     */
    public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = [])
    {
        $query = $this->table($collection)->where($column, 'regex', "/$value/i");

Simon Schaufelberger's avatar
Simon Schaufelberger committed
21
        if ($excludeId !== null && $excludeId != 'NULL') {
22 23 24 25 26 27 28 29 30 31 32 33
            $query->where($idColumn ?: 'id', '<>', $excludeId);
        }

        foreach ($extra as $key => $extraValue) {
            $this->addWhere($query, $key, $extraValue);
        }

        return $query->count();
    }

    /**
     * Count the number of objects in a collection with the given values.
Jens Segers's avatar
Jens Segers committed
34 35 36 37
     * @param string $collection
     * @param string $column
     * @param array $values
     * @param array $extra
38 39 40 41
     * @return int
     */
    public function getMultiCount($collection, $column, array $values, array $extra = [])
    {
Curos's avatar
Curos committed
42
        // Generates a regex like '/(a|b|c)/i' which can query multiple values
Divine's avatar
Divine committed
43
        $regex = '/('.implode('|', $values).')/i';
Jens Segers's avatar
Jens Segers committed
44

Curos's avatar
Curos committed
45
        $query = $this->table($collection)->where($column, 'regex', $regex);
46 47 48 49 50 51 52 53

        foreach ($extra as $key => $extraValue) {
            $this->addWhere($query, $key, $extraValue);
        }

        return $query->count();
    }
}