/var/www/hkosl.com/demo_google/application/vendor/illuminate/database/Concerns/BuildsQueries.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php

namespace Illuminate\Database\Concerns;

use 
Illuminate\Container\Container;
use 
Illuminate\Pagination\Paginator;
use 
Illuminate\Pagination\LengthAwarePaginator;

trait BuildsQueries
{
    
/**
     * Chunk the results of the query.
     *
     * @param  int  $count
     * @param  callable  $callback
     * @return bool
     */
    
public function chunk($countcallable $callback)
    {
        
$this->enforceOrderBy();

        
$page 1;

        do {
            
// We'll execute the query for the given page and get the results. If there are
            // no results we can just break and return from here. When there are results
            // we will call the callback with the current chunk of these results here.
            
$results $this->forPage($page$count)->get();

            
$countResults $results->count();

            if (
$countResults == 0) {
                break;
            }

            
// On each chunk result set, we will pass them to the callback and then let the
            // developer take care of everything within the callback, which allows us to
            // keep the memory low for spinning through large result sets for working.
            
if ($callback($results) === false) {
                return 
false;
            }

            
$page++;
        } while (
$countResults == $count);

        return 
true;
    }

    
/**
     * Execute a callback over each item while chunking.
     *
     * @param  callable  $callback
     * @param  int  $count
     * @return bool
     */
    
public function each(callable $callback$count 1000)
    {
        return 
$this->chunk($count, function ($results) use ($callback) {
            foreach (
$results as $key => $value) {
                if (
$callback($value$key) === false) {
                    return 
false;
                }
            }
        });
    }

    
/**
     * Execute the query and get the first result.
     *
     * @param  array  $columns
     * @return \Illuminate\Database\Eloquent\Model|static|null
     */
    
public function first($columns = ['*'])
    {
        return 
$this->take(1)->get($columns)->first();
    }

    
/**
     * Apply the callback's query changes if the given "value" is true.
     *
     * @param  mixed  $value
     * @param  callable  $callback
     * @param  callable  $default
     * @return mixed
     */
    
public function when($value$callback$default null)
    {
        if (
$value) {
            return 
$callback($this$value) ?: $this;
        } elseif (
$default) {
            return 
$default($this$value) ?: $this;
        }

        return 
$this;
    }

    
/**
     * Pass the query to a given callback.
     *
     * @param  \Closure  $callback
     * @return \Illuminate\Database\Query\Builder
     */
    
public function tap($callback)
    {
        return 
$this->when(true$callback);
    }

    
/**
     * Apply the callback's query changes if the given "value" is false.
     *
     * @param  mixed  $value
     * @param  callable  $callback
     * @param  callable  $default
     * @return mixed
     */
    
public function unless($value$callback$default null)
    {
        if (! 
$value) {
            return 
$callback($this$value) ?: $this;
        } elseif (
$default) {
            return 
$default($this$value) ?: $this;
        }

        return 
$this;
    }

    
/**
     * Create a new length-aware paginator instance.
     *
     * @param  \Illuminate\Support\Collection  $items
     * @param  int  $total
     * @param  int  $perPage
     * @param  int  $currentPage
     * @param  array  $options
     * @return \Illuminate\Pagination\LengthAwarePaginator
     */
    
protected function paginator($items$total$perPage$currentPage$options)
    {
        return 
Container::getInstance()->makeWith(LengthAwarePaginator::class, compact(
            
'items''total''perPage''currentPage''options'
        
));
    }

    
/**
     * Create a new simple paginator instance.
     *
     * @param  \Illuminate\Support\Collection  $items
     * @param  int $perPage
     * @param  int $currentPage
     * @param  array  $options
     * @return \Illuminate\Pagination\Paginator
     */
    
protected function simplePaginator($items$perPage$currentPage$options)
    {
        return 
Container::getInstance()->makeWith(Paginator::class, compact(
            
'items''perPage''currentPage''options'
        
));
    }
}