Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions docs/resources.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,44 @@ public function visibleTo($item)
}
```

## Queries

Every query made by Runway to your model will call the `runway` query scope. This allows you to easily filter the models returned by Runway.

```php
class YourModel extends Model
{
public function scopeRunway($query)
{
return $query->where('something', true);
}
}
```

If you only want to filter models returned in the Control Panel, see the `runwayListing` and `runwaySearch` scopes documented on the [Control Panel](/control-panel#content-scoping-control-panel-results) page.

### Disabling global scopes

By default, Runway will observe all global scopes registered on your model. However, this might not be ideal if you want to access, for example, soft deleted models in Runway.

You can work around this by calling the `withoutGlobalScopes` method in the `runway` query scope:

```php
class YourModel extends Model
{
public function scopeRunway($query)
{
// Disables ALL global scopes
return $query->->withoutGlobalScopes();

// Disables a specific global scope
return $query->withoutGlobalScope([ActiveScope::class]);
}
}
```

You can find more information about global scopes on the [Laravel documentation](https://laravel.com/docs/12.x/eloquent#removing-global-scopes).

## List of Resources

If you're unsure about the handle of a resource, you may want to check it. You may do so with the `php please runway:resources` command which will display a list of Runway Resources.
Expand Down
2 changes: 1 addition & 1 deletion src/Console/Commands/RebuildUriCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public function handle()
return;
}

$query = $resource->model()->newQuery()->withoutGlobalScopes();
$query = $resource->newEloquentQuery()->withoutGlobalScopes();
$query->when($query->hasNamedScope('runwayRoutes'), fn ($query) => $query->runwayRoutes());

if (! $query->exists()) {
Expand Down
2 changes: 1 addition & 1 deletion src/Fieldtypes/BaseFieldtype.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public function getIndexItems($request)
{
$resource = Runway::findResource($this->config('resource'));

$query = $resource->model()->newQuery();
$query = $resource->newEloquentQuery();

$query->when($query->hasNamedScope('runwayListing'), fn ($query) => $query->runwayListing());

Expand Down
4 changes: 1 addition & 3 deletions src/GraphQL/ResourceIndexQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,7 @@ public function args(): array

public function resolve($root, $args)
{
$query = $this->resource->model()
->newQuery()
->with($this->resource->eagerLoadingRelationships());
$query = $this->resource->newEloquentQuery()->with($this->resource->eagerLoadingRelationships());

$this->filterQuery($query, $args['filter'] ?? []);
$this->sortQuery($query, $args['sort'] ?? []);
Expand Down
6 changes: 3 additions & 3 deletions src/Http/Controllers/CP/ModelRevisionsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class ModelRevisionsController extends CpController

public function index(Request $request, Resource $resource, $model)
{
$model = $resource->model()
$model = $resource->newEloquentQuery()
->where($resource->model()->qualifyColumn($resource->routeKey()), $model)
->first();

Expand Down Expand Up @@ -43,7 +43,7 @@ public function index(Request $request, Resource $resource, $model)

public function store(Request $request, Resource $resource, $model)
{
$model = $resource->model()
$model = $resource->newEloquentQuery()
->where($resource->model()->qualifyColumn($resource->routeKey()), $model)
->first();

Expand All @@ -57,7 +57,7 @@ public function store(Request $request, Resource $resource, $model)

public function show(Request $request, Resource $resource, $model, $revisionId)
{
$model = $resource->model()
$model = $resource->newEloquentQuery()
->where($resource->model()->qualifyColumn($resource->routeKey()), $model)
->first();

Expand Down
4 changes: 2 additions & 2 deletions src/Http/Controllers/CP/PublishedModelsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class PublishedModelsController extends CpController

public function store(Request $request, Resource $resource, $model)
{
$model = $resource->model()
$model = $resource->newEloquentQuery()
->where($resource->model()->qualifyColumn($resource->routeKey()), $model)
->first();

Expand All @@ -36,7 +36,7 @@ public function store(Request $request, Resource $resource, $model)

public function destroy(Request $request, Resource $resource, $model)
{
$model = $resource->model()
$model = $resource->newEloquentQuery()
->where($resource->model()->qualifyColumn($resource->routeKey()), $model)
->first();

Expand Down
4 changes: 2 additions & 2 deletions src/Http/Controllers/CP/ResourceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ public function store(StoreRequest $request, Resource $resource)

public function edit(EditRequest $request, Resource $resource, $model)
{
$model = $resource->model()->where($resource->model()->qualifyColumn($resource->routeKey()), $model)->first();
$model = $resource->newEloquentQuery()->firstWhere($resource->model()->qualifyColumn($resource->routeKey()), $model);

if (! $model) {
throw new NotFoundHttpException;
Expand Down Expand Up @@ -181,7 +181,7 @@ public function update(UpdateRequest $request, Resource $resource, $model)
{
$resource->blueprint()->fields()->setParent($model)->addValues($request->all())->validator()->validate();

$model = $resource->model()->where($resource->model()->qualifyColumn($resource->routeKey()), $model)->first();
$model = $resource->newEloquentQuery()->firstWhere($resource->model()->qualifyColumn($resource->routeKey()), $model);
$model = $model->fromWorkingCopy();

$this->prepareModelForSaving($resource, $model, $request);
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Controllers/CP/ResourceListingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public function index(FilteredRequest $request, Resource $resource)
abort(403);
}

$query = $resource->model()->with($resource->eagerLoadingRelationships());
$query = $resource->newEloquentQuery()->with($resource->eagerLoadingRelationships());

$query->when($query->hasNamedScope('runwayListing'), fn ($query) => $query->runwayListing());

Expand Down
6 changes: 6 additions & 0 deletions src/Resource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace StatamicRadPack\Runway;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
Expand Down Expand Up @@ -33,6 +34,11 @@ public function model(): Model
return $this->model;
}

public function newEloquentQuery(): Builder
{
return $this->model->newQuery()->runway();
}

public function name()
{
return $this->name;
Expand Down
2 changes: 1 addition & 1 deletion src/Routing/RunwayUri.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class RunwayUri extends Model

public function model(): MorphTo
{
return $this->morphTo();
return $this->morphTo()->runway();
}

public function getTable()
Expand Down
3 changes: 1 addition & 2 deletions src/Search/Provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public function provide(): Collection

return collect($resources)->flatMap(function ($handle) {
return Runway::findResource($handle)
->model()
->query()
->newEloquentQuery()
->whereStatus('published')
->get()
->mapInto(Searchable::class);
Expand Down
2 changes: 1 addition & 1 deletion src/Tags/RunwayTag.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public function count(): int

protected function query(): Builder
{
$query = $this->resource->model()->query()
$query = $this->resource->query()
->when(
$this->params->get('status'),
fn ($query, $status) => $query->whereStatus($status),
Expand Down
5 changes: 5 additions & 0 deletions src/Traits/HasRunwayResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ public function reference(): string
return "runway::{$this->runwayResource()->handle()}::{$this->getKey()}";
}

public function scopeRunway(Builder $query)
{
return $query;
}

public function scopeRunwaySearch(Builder $query, string $searchQuery)
{
$this->runwayResource()->blueprint()->fields()->all()
Expand Down
Loading