Laravel, как добавить пользовательскую функцию в модель Eloquent?

У меня есть модель продукта

class Product extends Model { ... public function prices() { return $this->hasMany('App\Price'); } ... } 

Я хочу добавить функцию, которая вернет самую низкую цену, а в контроллере я могу получить значение, используя:

 Product::find(1)->lowest; 

Я добавил это в модель продукта:

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

но я получил сообщение об ошибке:

 Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation 

И если я использую Product::find(1)->lowest(); , это будет работать. Можно ли получить Product::find(1)->lowest; работать?

Любая помощь будет оценена по достоинству.

Когда вы пытаетесь получить доступ к функции в модели как переменной, laravel предполагает, что вы пытаетесь получить связанную модель. Они называют их динамическими свойствами. Вместо этого вам нужен пользовательский атрибут.

добавьте к вашей модели следующий метод:

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

Теперь вы должны иметь доступ к нему следующим образом:

 Product::find(1)->lowest; 

Использовать аксеспарины «Красноречивый»

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

затем

 $product->lowest; 

почему вы просто не делаете этого? я знаю, это не то, о чем вы просили специально, и иногда это может быть плохой практикой. но в вашем случае я думаю, что это хорошо.

 $product = Product::find(1)->with(['prices' => function ($query) { $query->min('price'); }])->get();