Browse Source

Column::fill

jqh 4 years ago
parent
commit
360b115e7f

+ 1 - 1
src/Contracts/Repository.php

@@ -20,7 +20,7 @@ interface Repository
     /**
      * 获取主键名称.
      *
-     * @return string
+     * @return string|array
      */
     public function getKeyName();
 

+ 5 - 5
src/Grid.php

@@ -107,9 +107,9 @@ class Grid
     /**
      * Default primary key name.
      *
-     * @var string
+     * @var string|array
      */
-    protected $keyName = 'id';
+    protected $keyName;
 
     /**
      * View for grid to render.
@@ -224,11 +224,11 @@ class Grid
     /**
      * Set primary key name.
      *
-     * @param string $name
+     * @param string|array $name
      *
      * @return $this
      */
-    public function setKeyName(string $name)
+    public function setKeyName($name)
     {
         $this->keyName = $name;
 
@@ -238,7 +238,7 @@ class Grid
     /**
      * Get or set primary key name.
      *
-     * @return string|void
+     * @return string|array
      */
     public function getKeyName()
     {

+ 13 - 6
src/Grid/Column.php

@@ -242,7 +242,13 @@ class Column
      */
     public static function setOriginalGridModels(Collection $collection)
     {
-        static::$originalGridModels = $collection;
+        static::$originalGridModels = $collection->map(function ($row) {
+            if (is_object($row)) {
+                return clone $row;
+            }
+
+            return $row;
+        });
     }
 
     /**
@@ -527,18 +533,19 @@ class Column
                 $row['#'] = $i;
             }
 
-            $this->original = $value = Arr::get($row, $this->name);
+            $this->setOriginalModel(static::$originalGridModels[$key]);
 
-            $this->value = $value = $this->htmlEntityEncode($value);
+            $this->original = Arr::get($this->originalModel, $this->name);
 
-            $this->setOriginalModel(static::$originalGridModels[$key]);
+            $this->value = $value = $this->htmlEntityEncode(Arr::get($row, $this->name));
 
             $this->processConditions();
 
-            Helper::arraySet($row, $this->name, $value);
-
             if ($this->hasDisplayCallbacks()) {
                 $value = $this->callDisplayCallbacks($this->original);
+            }
+
+            if ($value !== $this->value) {
                 Helper::arraySet($row, $this->name, $value);
             }
         }

+ 1 - 1
src/Grid/Model.php

@@ -204,7 +204,7 @@ class Model
     /**
      * Get primary key name of model.
      *
-     * @return string
+     * @return string|array
      */
     public function getKeyName()
     {

+ 5 - 0
src/Grid/Row.php

@@ -10,6 +10,7 @@ use Illuminate\Contracts\Support\Htmlable;
 use Illuminate\Contracts\Support\Jsonable;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Arr;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Fluent;
 
 class Row implements Arrayable
@@ -197,6 +198,10 @@ class Row implements Arrayable
      */
     protected function output($value)
     {
+        if ($value instanceof Carbon) {
+            return $value;
+        }
+
         if ($value instanceof Renderable) {
             $value = $value->render();
         }

+ 1 - 1
src/Grid/RowAction.php

@@ -49,7 +49,7 @@ abstract class RowAction extends GridAction
     /**
      * Set row model.
      *
-     * @param Fluent $row
+     * @param Fluent|\Illuminate\Database\Eloquent\Model $row
      *
      * @return $this
      */

+ 3 - 3
src/Repositories/Repository.php

@@ -28,7 +28,7 @@ abstract class Repository implements RepositoryInterface, TreeRepository
     /**
      * 获取主键名称.
      *
-     * @return string
+     * @return string|array
      */
     public function getKeyName()
     {
@@ -38,9 +38,9 @@ abstract class Repository implements RepositoryInterface, TreeRepository
     /**
      * 设置主键名称.
      *
-     * @param string $keyName
+     * @param string|array $keyName
      */
-    public function setKeyName(?string $keyName)
+    public function setKeyName($keyName)
     {
         $this->keyName = $keyName;
     }