Kaynağa Gözat

增加Grid\Model::apply()方法

Jiang qinghua 4 yıl önce
ebeveyn
işleme
3b40849986
3 değiştirilmiş dosya ile 30 ekleme ve 12 silme
  1. 1 1
      src/Grid.php
  2. 28 0
      src/Grid/Model.php
  3. 1 11
      src/Repositories/EloquentRepository.php

+ 1 - 1
src/Grid.php

@@ -708,7 +708,7 @@ HTML;
 
     protected function renderHeaderOrFooter($callbacks)
     {
-        $target = [$this->processFilter()];
+        $target = [$this->processFilter(), $this];
         $content = [];
 
         foreach ($callbacks as $callback) {

+ 28 - 0
src/Grid/Model.php

@@ -649,6 +649,34 @@ class Model
         return $this;
     }
 
+    /**
+     * @param \Illuminate\Database\Query\Builder $query
+     * @param bool $fetch
+     * @param string[] $columns
+     *
+     * @return mixed
+     */
+    public function apply($query, bool $fetch = true, $columns = null)
+    {
+        $this->getQueries()->unique()->each(function ($value) use (&$query, $fetch, $columns) {
+            if (! $fetch && in_array($value['method'], ['paginate', 'simplePaginate', 'get'], true)) {
+                return;
+            }
+
+            if ($columns) {
+                if (in_array($value['method'], ['paginate', 'simplePaginate'], true)) {
+                    $value['arguments'][1] = $columns;
+                } elseif ($value['method'] === 'get') {
+                    $value['arguments'] = [$columns];
+                }
+            }
+
+            $query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
+        });
+
+        return $query;
+    }
+
     /**
      * Set the relationships that should be eager loaded.
      *

+ 1 - 11
src/Repositories/EloquentRepository.php

@@ -167,17 +167,7 @@ class EloquentRepository extends Repository implements TreeRepository
             $query->with($this->relations);
         }
 
-        $model->getQueries()->unique()->each(function ($value) use (&$query) {
-            if ($value['method'] === 'paginate' || $value['method'] === 'simplePaginate') {
-                $value['arguments'][1] = $this->getGridColumns();
-            } elseif ($value['method'] === 'get') {
-                $value['arguments'] = [$this->getGridColumns()];
-            }
-
-            $query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
-        });
-
-        return $query;
+        return $model->apply($query, true, $this->getGridColumns());
     }
 
     /**