app/Services/SearchService.php
public function searchPlaces(Tree $tree, string $search, int $offset = 0, int $limit = PHP_INT_MAX): Collection
    {
        $query = DB::table('places AS p0')
            ->where('p0.p_file', '=', $tree->id())
            ->leftJoin('places AS p1', 'p1.p_id', '=', 'p0.p_parent_id')
            ->leftJoin('places AS p2', 'p2.p_id', '=', 'p1.p_parent_id')
            ->leftJoin('places AS p3', 'p3.p_id', '=', 'p2.p_parent_id')
            ->leftJoin('places AS p4', 'p4.p_id', '=', 'p3.p_parent_id')
            ->leftJoin('places AS p5', 'p5.p_id', '=', 'p4.p_parent_id')
            ->leftJoin('places AS p6', 'p6.p_id', '=', 'p5.p_parent_id')
            ->leftJoin('places AS p7', 'p7.p_id', '=', 'p6.p_parent_id')
            ->leftJoin('places AS p8', 'p8.p_id', '=', 'p7.p_parent_id')
            ->orderBy('p0.p_place')
            ->orderBy('p1.p_place')
            ->orderBy('p2.p_place')
            ->orderBy('p3.p_place')
            ->orderBy('p4.p_place')
            ->orderBy('p5.p_place')
            ->orderBy('p6.p_place')
            ->orderBy('p7.p_place')
            ->orderBy('p8.p_place')
            ->select([
                'p0.p_place AS place0',
                'p1.p_place AS place1',
                'p2.p_place AS place2',
                'p3.p_place AS place3',
                'p4.p_place AS place4',
                'p5.p_place AS place5',
                'p6.p_place AS place6',
                'p7.p_place AS place7',
                'p8.p_place AS place8',
            ]);

        // Filter each level of the hierarchy.
        foreach (explode(',', $search, 9) as $level => $string) {
            $query->whereContains('p' . $level . '.p_place', $string);
        }

        $row_mapper = static function (stdClass $row) use ($tree): Place {
            $place = implode(', ', array_filter((array) $row));

            return new Place($place, $tree);
        };

        $filter = static function (): bool {
            return true;
        };

        return $this->paginateQuery($query, $row_mapper, $filter, $offset, $limit);
    }
public function searchPlaces(Tree $tree, string $search, int $offset = 0, int $limit = PHP_INT_MAX): Collection
    {
        $query = DB::table('places AS p0')
            ->where('p0.p_file', '=', $tree->id())
            ->leftJoin('places AS p1', 'p1.p_id', '=', 'p0.p_parent_id')
            ->leftJoin('places AS p2', 'p2.p_id', '=', 'p1.p_parent_id')
            ->leftJoin('places AS p3', 'p3.p_id', '=', 'p2.p_parent_id')
            ->leftJoin('places AS p4', 'p4.p_id', '=', 'p3.p_parent_id')
            ->leftJoin('places AS p5', 'p5.p_id', '=', 'p4.p_parent_id')
            ->leftJoin('places AS p6', 'p6.p_id', '=', 'p5.p_parent_id')
            ->leftJoin('places AS p7', 'p7.p_id', '=', 'p6.p_parent_id')
            ->leftJoin('places AS p8', 'p8.p_id', '=', 'p7.p_parent_id')
            ->orderBy('p0.p_place')
            ->orderBy('p1.p_place')
            ->orderBy('p2.p_place')
            ->orderBy('p3.p_place')
            ->orderBy('p4.p_place')
            ->orderBy('p5.p_place')
            ->orderBy('p6.p_place')
            ->orderBy('p7.p_place')
            ->orderBy('p8.p_place')
            ->select([
                'p0.p_place AS place0',
                'p1.p_place AS place1',
                'p2.p_place AS place2',
                'p3.p_place AS place3',
                'p4.p_place AS place4',
                'p5.p_place AS place5',
                'p6.p_place AS place6',
                'p7.p_place AS place7',
                'p8.p_place AS place8',
            ]);

        // Filter each level of the hierarchy.
        foreach (explode(',', $search, 9) as $level => $string) {
            $query->whereContains('p' . $level . '.p_place', $string);
        }

        $row_mapper = static function (stdClass $row) use ($tree): Place {
            $place = implode(', ', array_filter((array) $row));

            return new Place($place, $tree);
        };

        $filter = static function (): bool {
            return true;
        };

        return $this->paginateQuery($query, $row_mapper, $filter, $offset, $limit);
    }
public function searchPlaces ( Tree $ tree , string $ search , int $ offset = 0 , int $ limit = PHP_INT_MAX ) : Collection { $ query = DB :: table ( 'places AS p0' ) -> where ( 'p0.p_file' , '=' , $ tree -> id ( ) ) -> leftJoin ( 'places AS p1' , 'p1.p_id' , '=' , 'p0.p_parent_id' ) -> leftJoin ( 'places AS p2' , 'p2.p_id' , '=' , 'p1.p_parent_id' ) -> leftJoin ( 'places AS p3' , 'p3.p_id' , '=' , 'p2.p_parent_id' ) -> leftJoin ( 'places AS p4' , 'p4.p_id' , '=' , 'p3.p_parent_id' ) -> leftJoin ( 'places AS p5' , 'p5.p_id' , '=' , 'p4.p_parent_id' ) -> leftJoin ( 'places AS p6' , 'p6.p_id' , '=' , 'p5.p_parent_id' ) -> leftJoin ( 'places AS p7' , 'p7.p_id' , '=' , 'p6.p_parent_id' ) -> leftJoin ( 'places AS p8' , 'p8.p_id' , '=' , 'p7.p_parent_id' ) -> orderBy ( 'p0.p_place' ) -> orderBy ( 'p1.p_place' ) -> orderBy ( 'p2.p_place' ) -> orderBy ( 'p3.p_place' ) -> orderBy ( 'p4.p_place' ) -> orderBy ( 'p5.p_place' ) -> orderBy ( 'p6.p_place' ) -> orderBy ( 'p7.p_place' ) -> orderBy ( 'p8.p_place' ) -> select ( [ 'p0.p_place AS place0' , 'p1.p_place AS place1' , 'p2.p_place AS place2' , 'p3.p_place AS place3' , 'p4.p_place AS place4' , 'p5.p_place AS place5' , 'p6.p_place AS place6' , 'p7.p_place AS place7' , 'p8.p_place AS place8' , ] ) ; // Filter each level of the hierarchy. foreach ( explode ( ',' , $ search , 9 ) as $ level => $ string ) { $ query -> whereContains ( 'p' . $ level . '.p_place' , $ string ) ; } $ row_mapper = static function ( stdClass $ row ) use ( $ tree ) : Place { $ place = implode ( ', ' , array_filter ( ( array ) $ row ) ) ; return new Place ( $ place , $ tree ) ; } ; $ filter = static function ( ) : bool { return true ; } ; return $ this -> paginateQuery ( $ query , $ row_mapper , $ filter , $ offset , $ limit ) ; }
Search for places.

@param Tree   $tree
@param string $search
@param int    $offset
@param int    $limit

@return Collection
@return Place[]
Search for places .