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

Wakanda's avatar
Level 10

Conditionally/Dynamically render has many relations based on instance gender in Laravel Nova

Hi devs,

I would want to render Dynamically render has many relations based on instance gender in Laravel Nova,

Relations

  /**
     * @return HasMany
     */
    public function sireOffsprings()
    {
        return $this->hasMany(Animal::class, 'sire_id');
    }

    /**
     * @return HasMany
     */
    public function damOffsprings()
    {
        return $this->hasMany(Animal::class, 'dam_id');
    }

Nova

public function fields(Request $request)
    {
        return [
					HasMany::make('Sire Offsprings', 'sireOffsprings', Animal::class),

            		HasMany::make('Dam Offsprings', 'damOffsprings', Animal::class),
		]
}

I only want to show one relation at a time, if the current Animal instance gender is male show only Sire Offspring and the opposite is true for the female gender. How can I do this in nova

0 likes
1 reply
filipbaginski's avatar

As I see try to use this code in your resource:

    /**
     * Build a "relatable" query for the given resource.
     *
     * This query determines which instances of the model may be attached to other resources.
     *
     * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @param  \Laravel\Nova\Fields\Field  $field
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function relatablesireOffsprings(NovaRequest $request, $query)
    {
        return $query->where('gender', '=', 1);   // e.g. 1 = male //
    }

Please or to participate in this conversation.