@kirill-93

Как в laravel добавить в выборку данные метода?

Здравствуйте, есть модель Product. В модель добавил методы prevProduct() и nextProduct():
public function prevProduct()
    {
        $id = $this->attributes['id'];

        $prev_product = Product::where('id', '<', $id)->first();

        if ($prev_product) {
             $prev_product = Product::where('id', '>', $id)->first();
        }

        return $prev_product;
    }

Как мне добавить результаты этого метода в выборку?
То есть примерно так:
$product = Product::with('prev_product')->where('id', 2)->first();
dd($product->prev_product);


В данном случае ругается Call to undefined method Illuminate\Database\Query\Builder::prev_product()
Пробовал добавлять эти поля в $appends и переименовывать в getPrevProductAttribute, но в этом случае получается зацикливание.
Как быть?
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 1
neuotq
@neuotq
Прокрастинация
Ответ на основе обновленных данных
Где-то в модели Product (обновил добавил проверку)
protected $appends = ['prev_product_json'];

 public function getPrevProductJsonAttribute()
	{	    
	    $product = Product::where('id', '<', $this->id)->first() ?? Product::where('id', '>', $this->id)->first();
	    return isset($product) ?  $product->toJson() : NULL;
	}

Ну и после этого где нужно:
$product = Product::find(2);
dd($product->prev_product_json);

PS только сразу подумайте, возможно вам нужно прошерстить поля и создать список полей которые не стоит выводить в json , тогда в моделе делаем protected $hidden = ['field_name'];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы