Laravel how to add a custom function in an Eloquent model?

Use Eloquent accessors

public function getLowestAttribute()
{
    return $this->prices->min('price');
}

Then

$product->lowest;

When you try to access a function in the model as a variable, laravel assumes you're trying to retrieve a related model. They call them dynamic properties. What you need instead is a custom attribute.

Before Laravel 9

Laravel 6 docs: https://laravel.com/docs/6.x/eloquent-mutators

add following method to your model:

public function getLowestAttribute()
{
    //do whatever you want to do
    return 'lowest price';
}

Now you should be able to access it like this:

Product::find(1)->lowest;

EDIT: New in Laravel 9

Laravel 9 offers a new way of dealing with attributes:

Docs: https://laravel.com/docs/9.x/eloquent-mutators#accessors-and-mutators

// use Illuminate\Database\Eloquent\Casts\Attribute;

public function lowest(): Attribute
{
     return new Attribute(
        get: function( $originalValue ){
         //do whatever you want to do
         //return $modifiedValue;
      });

     /**
      * Or alternatively:-
      *
      * return Attribute::get( function( $originalValue ){
      *    // do whatever you want to do
      *    // return $modifiedValue;
      * });
      */
}