Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Класс 'Корзина' не найден

Luke Derkzen спросил: 28 марта 2018 в 03:51 в: php

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

База данных была успешно перенесена и высеяна.

Миграция сводной таблицы:

<?phpuse Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;class CreateOrderProductTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('order_product', function (Blueprint $table) {
        $table->integer('order_id');
        $table->integer('product_id');
        $table->float('price');
        $table->integer('amount');
        $table->primary(array('order_id', 'product_id'));
        $table->timestamps();
    });
}/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('orders_products');
}
}

Продукт Модель:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Product extends Model
{
protected $fillable = ['name', 'price', 'stock', 'short_description', 'long_description'];public function orders() {
    return $this->belongsToMany('App\Order', 'order_product', 'product_id', 'order_id');
}public function carts() {
    return $this->belongsToMany('App\Cart', 'cart_product', 'product_id', 'cart_id');
}
}

Функция удаления:

public function destroy($id)
{
    if ($this->validateID($id)) {
        $product = Product::find($id);
        //$product->carts()->detach(); --THE PROBLEMATIC LINE
        Product::destroy($id);
    }
    Session::flash('success', $product->name.' has been succesfully deleted.');
    return redirect()->to('/products');
}


1 ответ

Есть решение
devk ответил: 28 марта 2018 в 04:34

Вы не указали полное пространство имен в своих отношениях belongsToMany.

Возможно, что-то в этом роде (если у вас нет подпапок для моделей):

public function orders() {
    return $this->belongsToMany('App\Order', 'order_product', 'product_id', 'order_id');
}public function carts() {
    return $this->belongsToMany('App\Cart', 'cart_product', 'product_id', 'cart_id');
}

Кроме того, я бы порекомендовал добавить это в миграцию сводной таблицы:

Schema::create('order_product', function (Blueprint $table) {
    // Also, you would need to make `order_id` and `product_id` unsigned,
    // assuming your other `id` columns are `autoincrement` (which are unsigned by default)
    $table->integer('order_id')->unsigned();
    $table->integer('product_id')->unsigned();
    $table->float('price');
    $table->integer('amount');
    $table->primary(array('order_id', 'product_id'));
    $table->timestamps();    // Adds foreign key to orders
    $table->foreign('order_id')
        ->references('id')
        ->on('orders')
        // Automatically deletes the pivot, when related order is deleted
        ->onDelete('cascade');    // Adds foreign key to products
    $table->foreign('product_id')
        ->references('id')
        ->on('products')
        // Automatically deletes the pivot, when related cart is deleted
        ->onDelete('cascade');
});

Кроме того, ваша таблица в части down() миграции не соответствует фактическому имени таблицы в части up().

Luke Derkzen ответил: 28 марта 2018 в 04:05
Я пробовал это раньше, и не дал никаких результатов. Однако только что попробовал это снова и перенастроил базу данных, и теперь она работает. Должно быть, забыли мигрировать в прошлый раз.
Luke Derkzen ответил: 28 марта 2018 в 04:09
count (): Параметр должен быть массивом или объектом, который реализует Countable. Теперь я получаю следующую ошибку, когда я раскомментирую строку с detach.
devk ответил: 28 марта 2018 в 04:11
Проблема в одной линии?
Luke Derkzen ответил: 28 марта 2018 в 04:12
Да, это на одной линии. Все работает, когда это закомментировано.
devk ответил: 28 марта 2018 в 04:14
Линия кажется правильной. Можете ли вы проверить, что отношения работают, сбросив карточки продуктов: dd($product->carts) над закомментированной строкой?