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

abkrim's avatar
Level 13

HasOne not show anything

Laravel Nova 3.1.0 / Laravel 7.2.1

Models

Server

class Server extends Model
{
    use SoftDeletes, CascadeSoftDeletes;

    protected $guarded = [];


    public function provider()
    {
        return $this->hasOne('App\Provider');
    }

}

Provider

class Provider extends Model
{
    protected $guarded = [];

    public function server()
    {
        return $this->belongsTo('App\Server');
    }
}

Nova Resources

Server

public function fields(Request $request)
{
	return [
		ID::make()->sortable(),

		Text::make('FQDN')->sortable()->rules('required', 'max:255'),
		Text::make('alias')->sortable()->rules('max:255'),

		HasOne::make('Proveedor', 'provider', 'App\Nova\Provider')

		// Try also 
		// 	HasOne::make('Provider')
	];
}

Provider

public function fields(Request $request)
{
	return [
		ID::make()->sortable(),

		Text::make('Nombre', 'name')->sortable()->rules('required', 'max:100'),
		Text::make('Teléfono','telephone')->rules('max:20'),
		Textarea::make('Notas','notes')->alwaysShow(),
	];
}
  • On table Provider has two providers.
  • Table providers has a provider_id column.

I don't see my mistake ... I've been head butting all morning

0 likes
6 replies
bugsysha's avatar

Table providers has a provider_id column.

Is this a typo or not? Cause providers table should not have reference to itself.

bugsysha's avatar

Also having one2one relationship there does not make sense to me. I think that Provider can have many Servers.

abkrim's avatar
Level 13

@bugsysha Yes is a mistake in typo... real is table server has a provider_id

Sever hasone Provider Provider hasmany Server

You can explian me? I'm lost and tried several ways and not work.

abkrim's avatar
Level 13

Oh my God...

Relation is belongsTo

Server resource

BelongsTo::make('Provider')->nullable(false)

Provider resource

public static $title = 'name';

Server model

public function provider()
{
    return $this->belongsTo(Provider::class);
}

Provider Model

public function server()
{
    return $this->hasMany('App\Server');
}

Thanks.

bugsysha's avatar

As I see it DigitalOcean is a provider and Server is one of their Droplets. So with one2one relationship, it turns out that DigitalOcean can provide only one Droplet to whoever comes first to their site and creates a server.

Please or to participate in this conversation.