F
Filament16mo ago
HL

->relationship() with hasOneThrough() relation doesn't work anymore

Hi guys, in my Account model I have this relation:
public function games()
{
return $this->hasOneThrough(
Game::class,
SmurfType::class,
'id', // Foreign key on SmurfType table
'id', // Foreign key on Game table
'smurftype', // Local key on Account table
'game' // Local key on SmurfType table
);
}
public function games()
{
return $this->hasOneThrough(
Game::class,
SmurfType::class,
'id', // Foreign key on SmurfType table
'id', // Foreign key on Game table
'smurftype', // Local key on Account table
'game' // Local key on SmurfType table
);
}
In v2 I used this and it worked perfectly:
SelectFilter::make('game')
->relationship('games', 'name'),
SelectFilter::make('game')
->relationship('games', 'name'),
Now it gives me this error: Filament\Forms\Components\Select::getRelationship(): Return value must be of type Illuminate\Database\Eloquent\Relations\BelongsTo|Illuminate\Database\Eloquent\Relations\BelongsToMany|Znck\Eloquent\Relations\BelongsToThrough|null, Illuminate\Database\Eloquent\Relations\HasOneThrough returned Is there a way to solve this without manually giving options and a query method myself, like it used to be?
Solution:
The only solution for now seems to be to use this package: https://github.com/staudenmeir/belongs-to-through And the relationship should look like htis: ...
GitHub
GitHub - staudenmeir/belongs-to-through: Laravel Eloquent BelongsTo...
Laravel Eloquent BelongsToThrough relationships. Contribute to staudenmeir/belongs-to-through development by creating an account on GitHub.
Jump to solution
2 Replies
Solution
HL
HL16mo ago
The only solution for now seems to be to use this package: https://github.com/staudenmeir/belongs-to-through And the relationship should look like htis:
use \Znck\Eloquent\Traits\BelongsToThrough;

public function games()
{
return $this->belongsToThrough(
Game::class,
SmurfType::class,
null,
'',
[Game::class => 'game', SmurfType::class => 'smurftype']
);
}
use \Znck\Eloquent\Traits\BelongsToThrough;

public function games()
{
return $this->belongsToThrough(
Game::class,
SmurfType::class,
null,
'',
[Game::class => 'game', SmurfType::class => 'smurftype']
);
}
GitHub
GitHub - staudenmeir/belongs-to-through: Laravel Eloquent BelongsTo...
Laravel Eloquent BelongsToThrough relationships. Contribute to staudenmeir/belongs-to-through development by creating an account on GitHub.
HL
HLOP16mo ago
An extra note, that using this package, the indicators don't work as intended, they display the name of the middle class and not the target class. You can solve this like this:
->indicateUsing(function (array $data): ?string {
if (!$data['value']) {
return null;
};
$game = Game::find($data['value']);
return 'Game: ' . $game->name;
}),
->indicateUsing(function (array $data): ?string {
if (!$data['value']) {
return null;
};
$game = Game::find($data['value']);
return 'Game: ' . $game->name;
}),
Want results from more Discord servers?
Add your server