Explorar el Código

表格支持多层级关联关系字段查询功能

jqh hace 4 años
padre
commit
e30dc1cf67
Se han modificado 2 ficheros con 9 adiciones y 7 borrados
  1. 5 4
      src/Grid/Filter/AbstractFilter.php
  2. 4 3
      src/Support/Helper.php

+ 5 - 4
src/Grid/Filter/AbstractFilter.php

@@ -519,14 +519,15 @@ abstract class AbstractFilter
      */
     protected function buildRelationQuery(...$params)
     {
-        $relation = substr($this->column, 0, strrpos($this->column, '.'));
-        $params[0] = Arr::last(explode('.', $this->column));
+        $column = explode('.', $this->column);
+
+        $params[0] = array_pop($column);
 
         // 增加对whereHasIn的支持
         $method = class_exists(WhereHasInServiceProvider::class) ? 'whereHasIn' : 'whereHas';
 
-        return [$method => [$relation, function ($relation) use ($params) {
-            call_user_func_array([$relation, $this->query], $params);
+        return [$method => [implode('.', $column), function ($q) use ($params) {
+            call_user_func_array([$q, $this->query], $params);
         }]];
     }
 

+ 4 - 3
src/Support/Helper.php

@@ -788,13 +788,14 @@ class Helper
      */
     public static function withRelationQuery($model, ?string $column, string $query, array $params)
     {
-        $relation = substr($column, 0, strrpos($column, '.'));
-        array_unshift($params, Arr::last(explode('.', $column)));
+        $column = explode('.', $column);
+
+        array_unshift($params, array_pop($column));
 
         // 增加对whereHasIn的支持
         $method = class_exists(WhereHasInServiceProvider::class) ? 'whereHasIn' : 'whereHas';
 
-        $model->$method($relation, function ($relation) use ($params, $query) {
+        $model->$method(implode('.', $column), function ($relation) use ($params, $query) {
             $relation->$query(...$params);
         });
     }