Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

ojwando's avatar

Filament Relation Manager

I have created TopicResource and SubtopicResource and I have created SubtopicsRelationManager and it is working fine . I have also created QuestionsRelationManager. But when I hit on New Subtopic or Edit Subtopic button I get this error;

Filament\Support\Services\RelationshipJoiner::prepareQueryForNoConstraints(): Argument #1 ($relationship) must be of type Illuminate\Database\Eloquent\Relations\Relation, null given, called in C:\xampp\htdocs\rev-app\vendor\filament\forms\src\Components\Select.php on line 765 Kindly help so i may continue with my project Here is the QuestionResource `<?php

namespace App\Filament\Resources;

use App\Filament\Resources\QuestionResource\Pages; use App\Filament\Resources\QuestionResource\RelationManagers; use App\Models\Question; use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope;

class QuestionResource extends Resource { protected static ?string $model = Question::class;

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

public static function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\TextInput::make('text')
            ->maxLength(255),
            Forms\Components\Select::make('subtopic_id')
            ->createOptionForm([
            Forms\Components\TextInput::make('name')
            ->maxLength(255),
                ])
            ->relationship('subtopic','name')
            ->searchable()
            ->preload(),
            Forms\Components\FileUpload::make('image')
            ->image()
            ->nullable()
            ->imageResizeMode('cover')
            ->imageCropAspectRatio('16:9')
            ->imageResizeTargetWidth('250')
            ->imageResizeTargetHeight('150')
            ->preserveFilenames(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            //
        ])
        ->filters([
            //
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}

public static function getRelations(): array
{
    return [
        //
    ];
}

public static function getPages(): array
{
    return [
        'index' => Pages\ListQuestions::route('/'),
        'create' => Pages\CreateQuestion::route('/create'),
        'edit' => Pages\EditQuestion::route('/{record}/edit'),
    ];
}

} `

Here is SubtopicResource: `<?php

namespace App\Filament\Resources;

use App\Filament\Resources\SubtopicResource\Pages; use App\Filament\Resources\SubtopicResource\RelationManagers; use App\Models\Subtopic; use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope;

class SubtopicResource extends Resource { protected static ?string $model = Subtopic::class;

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

public static function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\TextInput::make('name')
            ->maxLength(255),
            
            Forms\Components\Select::make('topic_id')
            ->createOptionForm([
            Forms\Components\TextInput::make('name')
            ->maxLength(255),
                ])
            ->relationship('topic','name')
            ->searchable()
            ->preload(),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('name')
            ->searchable(),
        ])
        ->filters([
            //
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}

public static function getRelations(): array
{
    return [
        RelationManagers\QuestionsRelationManager::class,
    ];
}

public static function getPages(): array
{
    return [
        'index' => Pages\ListSubtopics::route('/'),
        'create' => Pages\CreateSubtopic::route('/create'),
        'edit' => Pages\EditSubtopic::route('/{record}/edit'),
    ];
}

} `

Here is the QuestionRelationManager:

`<?php

namespace App\Filament\Resources\SubtopicResource\RelationManagers;

use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope;

class QuestionsRelationManager extends RelationManager { protected static string $relationship = 'questions';

public function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\TextInput::make('text')
                ->required()
                ->maxLength(255),
        ]);
}

public function table(Table $table): Table
{
    return $table
        ->recordTitleAttribute('text')
        ->columns([
            Tables\Columns\TextColumn::make('text'),
        ])
        ->filters([
            //
        ])
        ->headerActions([
            Tables\Actions\CreateAction::make(),
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
            Tables\Actions\DeleteAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}

} Here is the SubtopicsRelationManager;<?php

namespace App\Filament\Resources\TopicResource\RelationManagers;

use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope;

class SubtopicsRelationManager extends RelationManager { protected static string $relationship = 'subtopics';

public function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\TextInput::make('name')
                ->required()
                ->maxLength(255),
        ]);
}

public function table(Table $table): Table
{
    return $table
        ->recordTitleAttribute('name')
        ->columns([
            Tables\Columns\TextColumn::make('name'),
        ])
        ->filters([
            //
        ])
        ->headerActions([
            Tables\Actions\CreateAction::make(),
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
            Tables\Actions\DeleteAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}

} ` ''

0 likes
0 replies

Please or to participate in this conversation.