@@ -74,22 +74,44 @@ public function index()
74
74
collect ($ this ->sizer )->keys ()->filter (function ($ value ) {
75
75
return Str::endsWith ($ value , '_id ' );
76
76
})->map (function ($ value ) use (&$ data ) {
77
- $ val = str_replace ('_id ' , '' , $ value );
77
+ $ val = collect (explode ('. ' ,$ value ))->last ();
78
+ $ val = Str::replaceLast ('_id ' , '' , $ val );
78
79
$ model = '\App\Models \\' . Str::studly ($ val );
79
80
$ item = [];
80
- $ relation_id = Request::input ('where. ' . $ value , 0 );
81
+ $ where = Request::input ('where ' );
82
+ $ relation_id = isset ($ where [$ value ])?$ where [$ value ]:0 ;
81
83
if ($ relation_id && class_exists ($ model )) {
82
- $ fields = collect (isset ($ this ->mapsWhereFields [$ value ]) ? $ this ->mapsWhereFields [$ value ] : ['id ' , 'name ' ])
84
+ $ fields_and_relation = collect (isset ($ this ->mapsWhereFields [$ value ]) ? $ this ->mapsWhereFields [$ value ] : ['id ' , 'name ' ])
83
85
->map (function ($ field ){
84
86
if (is_string ($ field ) && Str::contains ($ field ,'` ' )){
85
87
return DB ::raw ($ field );
86
88
}
87
89
return $ field ;
88
- })->toArray ();
89
- $ item = collect ($ model ::select ($ fields )
90
- ->find ($ relation_id ))->toArray ();
90
+ });
91
+ $ fields = $ fields_and_relation ->filter (function ($ item ){
92
+ return !is_array ($ item );
93
+ })->toArray ();
94
+ $ relation = $ fields_and_relation ->filter (function ($ item ){
95
+ return is_array ($ item );
96
+ })->map (function ($ item ){
97
+ return function ($ q )use ($ item ){
98
+ if ($ item ){
99
+ $ q ->select ($ item );
100
+ }
101
+ return $ q ;
102
+ };
103
+ })->toArray ();
104
+ $ modelObj = $ model ::query ();
105
+ if ($ fields ){
106
+ $ modelObj = $ modelObj ->select ($ fields );
107
+ }
108
+ if ($ relation ){
109
+ $ modelObj = $ modelObj ->with ($ relation );
110
+ }
111
+ $ item = collect ($ modelObj ->find ($ relation_id ))->toArray ();
91
112
}
92
- $ data ['maps ' ][$ value ] = $ item ? [$ item ] : [];
113
+ $ map = $ item ? [$ item ] : [];
114
+ $ data ['maps ' ][$ value ] = $ map ;
93
115
});
94
116
//条件筛选及排序返回
95
117
$ this ->addOptions ();
0 commit comments