Laravel Eloquent delete () не работает

В документации говорится:

$user = User::find($user_id);

$user->delete();

Это не работает, однако ProductColor::find($color_id) работает. $color->delete() Ничего не возвращает, запрос DELETE FROM даже не выполняется (как видно на панели отладки).

Но я могу удалить запись с помощью:

ProductColor::destroy($color_id);

Должно быть что-то, что я упустил из виду ранее, я новичок в Laravel.

Я также использую магазин, и он работает как положено

public function store(Request $request)
    {
        $color = new ProductColor();
        $color->name = $request->color_name;
        $color->order = $request->color_order;
        $saved = $color->save();

        if ($saved) {
            return back()->with('message:success', 'Ok');
        } else {
            return back()->with('message:error', 'Error');
        }

    }

Подводить итоги

Это работает

public function destroy($color_id)
    {
        $deleted = ProductColor::destroy($color_id);

        if ($deleted) {
            return back()->with('message:success', 'Deleted');
        } else {
            return back()->with('message:error', 'Error');
        }
    }

Это НЕ

public function destroy($color_id)
{
  $color = ProductColor::find($color_id);

  $color->delete();
}

Моя модель

<?php

namespace Modules\Shop\Entities;

use Illuminate\Database\Eloquent\Model;
use Modules\Languages\Entities\Language;

class ProductColor extends Model
{
    protected $fillable = [];
    protected $table = 'product_colors';
}

person RomkaLTU    schedule 13.08.2017    source источник
comment
На самом деле я не знаю, почему это не работает. Но почему бы вам не попробовать это с запросом ?? $user = User::where('user_id', $user_id)->delete();   -  person diakosavvasn    schedule 13.08.2017
comment
Моя IDE показывает, что «где» не является статическим методом, поэтому я просто использовал User::destroy($user_id);   -  person RomkaLTU    schedule 13.08.2017
comment
В чем ошибка при попытке использовать delete()?   -  person lesssugar    schedule 13.08.2017
comment
Как я уже сказал, никаких ошибок, ничего просто не выполняется.   -  person RomkaLTU    schedule 13.08.2017


Ответы (4)


Извините, я понял проблему. Моя ошибка, чтобы опубликовать этот вопрос.

Что я пытался сделать:

$color = new ProductColor();
$color->find($color_id);
$color->delete();

Должно быть:

$color = ProductColor::find( $color_id );
$color->delete();

Моя проблема заключалась в том, что я боялся, что IDE будет жаловаться на использование нестатического метода find.

person RomkaLTU    schedule 13.08.2017
comment
Первый пример хорош, но вам придется присвоить возвращаемое значение find(), поскольку он возвращает новую модель, а не просто прикрепляет атрибуты к существующей. - person Devon; 03.02.2019

Ваш код в порядке - документы точно показывают, что вы делаете.

Если ошибки нет и цвет не удаляется должным образом, значит, $color_id не передается должным образом. Попробуйте использовать findOrFail или добавьте другую проверку того, что вы нашли ожидаемое модель.

person Don't Panic    schedule 13.08.2017

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

person Pradeep Kumar    schedule 13.07.2020

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

...

используйте Illuminate\Database\Eloquent\SoftDeletes;

класс Пользователь расширяет аутентифицируемый {

использовать SoftDeletes;

защищенные даты = ['deleted_at'];

...

person Julius Garcia    schedule 03.02.2019
comment
Это было бы только в том случае, если бы вы добавили столбец delete_at и хотели мягкое удаление. Если бы вы действительно хотели удалить строку, это было бы плохим решением. - person Devon; 03.02.2019
comment
Правильно, применимо только в том случае, если у вас есть столбец delete_at в таблице пользователей. См. laravel.com/docs/5.7/eloquent для добавления программных удалений. - person Julius Garcia; 04.02.2019