Quellcode durchsuchen

表格过滤器支持关联关系查询 #215

jqh vor 4 Jahren
Ursprung
Commit
299e874e89
1 geänderte Dateien mit 22 neuen und 1 gelöschten Zeilen
  1. 22 1
      src/Grid/Filter/AbstractFilter.php

+ 22 - 1
src/Grid/Filter/AbstractFilter.php

@@ -494,7 +494,28 @@ abstract class AbstractFilter
      */
     protected function buildCondition(...$params)
     {
-        return [$this->query => &$params];
+        $column = explode('.', $this->column);
+
+        if (count($column) == 1) {
+            return [$this->query => &$params];
+        }
+
+        return $this->buildRelationQuery(...$params);
+    }
+
+    /**
+     * @param mixed ...$params
+     *
+     * @return array
+     */
+    protected function buildRelationQuery(...$params)
+    {
+        $relation = substr($this->column, 0, strrpos($this->column, '.'));
+        $params[0] = Arr::last(explode('.', $this->column));
+
+        return ['whereHas' => [$relation, function ($relation) use ($params) {
+            call_user_func_array([$relation, $this->query], $params);
+        }]];
     }
 
     /**