Направете продукта представен/непредставен с Laravel

Опитвам се да направя функция за представен/непредставен продукт в Laravel 4.2, но получавам грешка

Извикване на недефиниран метод Illuminate\Database\Query\Builder::save()

Това е моята функция на контролера

public function featuredProduct() {

    $product_featured_id = Input::get('featured');

    $product = Product::where('product_id', $product_featured_id);

    Product::where('featured', 1)->update(['featured' => 0]); // make all other products featured -> 0

    $product->featured = 1;
    $product->save();
    return Redirect::to('/admin/products')->with('message', 'Product marked as featured!');
}

И това е формата в изгледа

{{ Form::open(['url' => '/admin/products/feature', 'method' => 'post']) }}

    <div class="form-group">
        <select class="form-control" name="featured">
            <option value="0">Remove from Featured</option>
                @foreach($products as $featured)

                    <option value="{{ $featured->product_id }}" {{ $featured->featured == 1 ? "selected" : ""}}>{{ $featured->title }}</option>
                @endforeach
        </select>
    </div>
    <button type="submit" class="btn btn-primary">Make Product Featured</button>
{{ Form::close() }}

В таблицата с продукти имам колона, която е освен 1 за представен продукт и 0 за непредставен продукт.

Какво пропускам тук?

актуализация:

public function featuredProduct() {

    $product_featured_id = Input::get('featured');

    if($product_featured_id == 0)
    {
        Product::where('featured', 1)->update(['featured' => 0]); // make all other products featured -> 0
    }
    else 
    {
        $product = Product::where('product_id', $product_featured_id)->first();
        Product::where('featured', 1)->update(['featured' => 0]); // make all other products featured -> 0

        $product->featured = 1;
        $product->save();
    }

    return Redirect::to('/admin/products')->with('message', 'Product marked as featured!');
}

person VLS    schedule 20.03.2017    source източник


Отговори (1)


Добавете извикване на метод ->first():

$product = Product::where('product_id', $product_featured_id)->first();

В този случай ще получите обект, а не екземпляр на Query Builder.

person Alexey Mezenin    schedule 20.03.2017
comment
Благодаря за отговора. Това работи, ако избера продукт, който да бъде представен. Но ако избера опция Remove from Featured получавам тази грешка ErrorException: Creating default object from empty value - person VLS; 20.03.2017
comment
Актуализирах въпроса си с това как съм го направил. Изглежда, че работи, но дали е добър подход? Може ли това да се оптимизира или не? - person VLS; 20.03.2017