diff --git a/src/Contracts/DataSource.php b/src/Contracts/DataSource.php index 1a9a71b3..923b25c7 100644 --- a/src/Contracts/DataSource.php +++ b/src/Contracts/DataSource.php @@ -2,6 +2,9 @@ namespace LaraZeus\Bolt\Contracts; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Collection; + interface DataSource { public function title(): string; @@ -13,4 +16,6 @@ public function getValuesUsing(): string; public function getKeysUsing(): string; public function getModel(): string; + + public function getQuery(): Builder | Collection; } diff --git a/src/DataSources/DataSourceContract.php b/src/DataSources/DataSourceContract.php index c409f317..e3d77ecf 100644 --- a/src/DataSources/DataSourceContract.php +++ b/src/DataSources/DataSourceContract.php @@ -3,6 +3,8 @@ namespace LaraZeus\Bolt\DataSources; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Collection; use LaraZeus\Bolt\Contracts\DataSource; abstract class DataSourceContract implements Arrayable, DataSource @@ -14,6 +16,11 @@ public function getSort(): int return 1; } + public function getQuery(): Builder | Collection + { + return resolve($this->getModel())->query(); + } + public function toArray(): array { return [ diff --git a/src/Fields/FieldsContract.php b/src/Fields/FieldsContract.php index 656590ea..763a8400 100644 --- a/src/Fields/FieldsContract.php +++ b/src/Fields/FieldsContract.php @@ -163,7 +163,7 @@ public function getCollectionsValuesForResponse(Field $field, FieldResponse $res ->join(', '); } else { $dataSourceClass = new $field->options['dataSource']; - $response = $dataSourceClass->getModel()::query() + $response = $dataSourceClass->getQuery() ->whereIn($dataSourceClass->getKeysUsing(), $response) ->pluck($dataSourceClass->getValuesUsing()) ->join(', '); @@ -218,7 +218,7 @@ public static function getFieldCollectionItemsList(Field | FieldPreset | array $ if (class_exists($zeusField->options['dataSource'])) { //@phpstan-ignore-next-line $dataSourceClass = new $zeusField->options['dataSource']; - $getCollection = $dataSourceClass->getModel()::pluck( + $getCollection = $dataSourceClass->getQuery()->pluck( $dataSourceClass->getValuesUsing(), $dataSourceClass->getKeysUsing() );