调用未定义的方法Illuminate \ Database \ Query \ Builder :: vehicles()

I have two models. A "Vehicle" and a "Tenant".

They have following relationships with each other.

A Tenant hasMany vehicles. A vehicle belongsTo a single Tenant.

For Tenant.php:

public function vehicles()
{
    return $this->hasMany('\App\Models\Vehicle');
}

For Vehicle.php:

public function tenant()
{
    return $this->belongsTo('\App\Models\Tenant');
}

Executing this :

 $this->user = $request->user();
    $userTenant = $this->user->tenant();
    $vehicle= $userTenant->vehicles()->first();

results in an error

Call to undefined method Illuminate\Database\Query\Builder::vehicles()

Pointing to this line :

$vehicle= $userTenant->vehicles()->first();

I am not so sure why is this happening =\

I can't see from your post what the relations are with a User, but the tenant() (with parentheses) probably returns a BelongsTo or other Relation instance that is being assigned to $userTenant. Try changing that line to a version without parentheses after tenant to get the Tenant Model instance instead:

$userTenant = $this->user->tenant;

Update from comments

when you call a relation as method, e.g.

$myModel->relation()

you get the corresponding relation class. When used as a getter, e.g.

$myModel->relation

it's essentially the same thing as calling

$myModel->relation()->get() for relations that target multiple models, or calling

$myModel->relation()->first() for relations that target a single model.

Checkout the docs for more info on relationship methods vs. dynamic properties