src/Handler.php
protected function filterRelation($key, $value)
    {
        $key = str_replace('~', '.', $key);
        $parts = explode('.', $key);

        $realKey = array_pop($parts);
        $relation = implode('.', $parts);

        if (! in_array($relation, array_keys($this->with))) {
            return;
        }

        extract($this->formatParam($realKey, $value));

        if (! $this->canFilter($column)) {
            return;
        }

        $this->builder->whereHas($relation, function ($q) use ($column, $comparator, $value) {
            if ($comparator == 'IN') {
                $values = explode(',', $value);
                $q->whereIn($column, $values);
            } elseif ($comparator == 'NOT IN') {
                $values = explode(',', $value);
                $q->whereNotIn($column, $values);
            } else {
                $values = explode('|', $value);
                if (count($values) > 1) {
                    $q->where(function ($query) use ($column, $comparator, $values) {
                        foreach ($values as $value) {
                            if ($comparator == 'LIKE' || $comparator == 'NOT LIKE') {
                                $value = preg_replace('/(^\*|\*$)/', '%', $value);
                            }
                            // Link the filters with AND of there is a "not" and with OR if there's none
                            if ($comparator == '!=' || $comparator == 'NOT LIKE') {
                                $query->where($column, $comparator, $value);
                            } else {
                                $query->orWhere($column, $comparator, $value);
                            }
                        }
                    });
                } else {
                    $value = $values[0];
                    if ($comparator == 'LIKE' || $comparator == 'NOT LIKE') {
                        $value = preg_replace('/(^\*|\*$)/', '%', $value);
                    }
                    if ($comparator == 'NULL' || $comparator == 'NOT NULL') {
                        $q->whereNull($column, 'and', $comparator == 'NOT NULL');
                    } else {
                        $q->where($column, $comparator, $value);
                    }
                }
            }
        });
    }
protected function filterRelation($key, $value)
    {
        $key = str_replace('~', '.', $key);
        $parts = explode('.', $key);

        $realKey = array_pop($parts);
        $relation = implode('.', $parts);

        if (! in_array($relation, array_keys($this->with))) {
            return;
        }

        extract($this->formatParam($realKey, $value));

        if (! $this->canFilter($column)) {
            return;
        }

        $this->builder->whereHas($relation, function ($q) use ($column, $comparator, $value) {
            if ($comparator == 'IN') {
                $values = explode(',', $value);
                $q->whereIn($column, $values);
            } elseif ($comparator == 'NOT IN') {
                $values = explode(',', $value);
                $q->whereNotIn($column, $values);
            } else {
                $values = explode('|', $value);
                if (count($values) > 1) {
                    $q->where(function ($query) use ($column, $comparator, $values) {
                        foreach ($values as $value) {
                            if ($comparator == 'LIKE' || $comparator == 'NOT LIKE') {
                                $value = preg_replace('/(^\*|\*$)/', '%', $value);
                            }
                            // Link the filters with AND of there is a "not" and with OR if there's none
                            if ($comparator == '!=' || $comparator == 'NOT LIKE') {
                                $query->where($column, $comparator, $value);
                            } else {
                                $query->orWhere($column, $comparator, $value);
                            }
                        }
                    });
                } else {
                    $value = $values[0];
                    if ($comparator == 'LIKE' || $comparator == 'NOT LIKE') {
                        $value = preg_replace('/(^\*|\*$)/', '%', $value);
                    }
                    if ($comparator == 'NULL' || $comparator == 'NOT NULL') {
                        $q->whereNull($column, 'and', $comparator == 'NOT NULL');
                    } else {
                        $q->where($column, $comparator, $value);
                    }
                }
            }
        });
    }
protected function filterRelation ( $ key , $ value ) { $ key = str_replace ( '~' , '.' , $ key ) ; $ parts = explode ( '.' , $ key ) ; $ realKey = array_pop ( $ parts ) ; $ relation = implode ( '.' , $ parts ) ; if ( ! in_array ( $ relation , array_keys ( $ this -> with ) ) ) { return ; } extract ( $ this -> formatParam ( $ realKey , $ value ) ) ; if ( ! $ this -> canFilter ( $ column ) ) { return ; } $ this -> builder -> whereHas ( $ relation , function ( $ q ) use ( $ column , $ comparator , $ value ) { if ( $ comparator == 'IN' ) { $ values = explode ( ',' , $ value ) ; $ q -> whereIn ( $ column , $ values ) ; } elseif ( $ comparator == 'NOT IN' ) { $ values = explode ( ',' , $ value ) ; $ q -> whereNotIn ( $ column , $ values ) ; } else { $ values = explode ( '|' , $ value ) ; if ( count ( $ values ) > 1 ) { $ q -> where ( function ( $ query ) use ( $ column , $ comparator , $ values ) { foreach ( $ values as $ value ) { if ( $ comparator == 'LIKE' || $ comparator == 'NOT LIKE' ) { $ value = preg_replace ( '/(^\*|\*$)/' , '%' , $ value ) ; } // Link the filters with AND of there is a "not" and with OR if there's none if ( $ comparator == '!=' || $ comparator == 'NOT LIKE' ) { $ query -> where ( $ column , $ comparator , $ value ) ; } else { $ query -> orWhere ( $ column , $ comparator , $ value ) ; } } } ) ; } else { $ value = $ values [ 0 ] ; if ( $ comparator == 'LIKE' || $ comparator == 'NOT LIKE' ) { $ value = preg_replace ( '/(^\*|\*$)/' , '%' , $ value ) ; } if ( $ comparator == 'NULL' || $ comparator == 'NOT NULL' ) { $ q -> whereNull ( $ column , 'and' , $ comparator == 'NOT NULL' ) ; } else { $ q -> where ( $ column , $ comparator , $ value ) ; } } } } ) ; }
Apply the filter to relationship query builder.

@param  string $key
@param  string $value
@return void
Apply the filter to relationship query builder .