@@ -378,35 +378,51 @@ public function whereHas($column, $closure = null, $or = false, $boost = false)
378378
379379 /**
380380 * @param $column
381+ * @param null $closure
381382 * @param bool $or
382383 * @return $this
383384 */
384- public function whereHasNull ($ column , $ or = false ) {
385- $ this ->query ['bool ' ][$ or ? 'should ' : 'filter ' ][] = [
386- 'bool ' => [
387- 'must_not ' => [
388- [
389- 'nested ' => [
390- 'path ' => strtolower ($ column ),
391- 'query ' => [
392- 'exists ' => [
393- 'field ' => strtolower ($ column )
385+ public function whereHasNull ($ column , $ closure = null , $ or = false ) {
386+ if ($ closure === null ) {
387+ $ this ->query ['bool ' ][$ or ? 'should ' : 'filter ' ][] = [
388+ 'bool ' => [
389+ 'must_not ' => [
390+ [
391+ 'nested ' => [
392+ 'path ' => strtolower ($ column ),
393+ 'query ' => [
394+ 'exists ' => [
395+ 'field ' => strtolower ($ column )
396+ ]
394397 ]
395398 ]
396399 ]
397400 ]
398401 ]
399- ]
400- ];
402+ ];
403+ } else {
404+ $ column_bak = $ column ;
405+ $ this ->getMappingProperty ($ column , true );
406+ $ builder = $ this ->nested_queries [$ column_bak ] ?? new LaravelElasticsearchQueryBuilder ($ this ->model , $ column_bak );
407+ $ closure ($ builder );
408+ $ nested_query = $ this ->createNestedQuery ($ column_bak , $ builder , '' );
409+ $ this ->query ['bool ' ][$ or ? 'should ' : 'filter ' ][] = [
410+ 'bool ' => [
411+ 'must_not ' => $ nested_query
412+ ]
413+ ];
414+ }
415+
401416 return $ this ;
402417 }
403418
404419 /**
405420 * @param $column
421+ * @param null $closure
406422 * @return LaravelElasticsearchQueryBuilder
407423 */
408- public function orWhereHasNull ($ column ) {
409- return $ this ->whereHasNull ($ column , true );
424+ public function orWhereHasNull ($ column, $ closure = null ) {
425+ return $ this ->whereHasNull ($ column , $ closure , $ or = true );
410426 }
411427
412428 /**
0 commit comments