Quellcode durchsuchen

Grid::column 支持多层级关联关系字段

jqh vor 4 Jahren
Ursprung
Commit
febf7029c1
2 geänderte Dateien mit 19 neuen und 8 gelöschten Zeilen
  1. 0 7
      src/Grid.php
  2. 19 1
      src/Grid/Column.php

+ 0 - 7
src/Grid.php

@@ -15,7 +15,6 @@ use Dcat\Admin\Traits\HasBuilderEvents;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Collection;
-use Illuminate\Support\Str;
 use Illuminate\Support\Traits\Macroable;
 
 class Grid
@@ -253,12 +252,6 @@ class Grid
      */
     public function column($name, $label = '')
     {
-        if (mb_strpos($name, '.') !== false) {
-            [$relationName, $relationColumn] = explode('.', $name);
-
-            $name = Str::snake($relationName).'.'.$relationColumn;
-        }
-
         return $this->addColumn($name, $label);
     }
 

+ 19 - 1
src/Grid/Column.php

@@ -186,13 +186,31 @@ class Column
      */
     public function __construct($name, $label)
     {
-        $this->name = $name;
+        $this->name = $this->formatName($name);
 
         $this->label = $this->formatLabel($label);
 
         $this->callResolving();
     }
 
+    protected function formatName($name)
+    {
+        if (! Str::contains($name, '.')) {
+            return $name;
+        }
+
+        $names = explode('.', $name);
+        $count = count($names);
+
+        foreach ($names as $i => &$name) {
+            if ($i + 1 < $count) {
+                $name = Str::snake($name);
+            }
+        }
+
+        return implode('.', $names);
+    }
+
     /**
      * Extend column displayer.
      *