SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 onDelete () - PullRequest
1 голос
/ 10 апреля 2020
Schema::create('category_product', function (Blueprint $table) {
        $table->unsignedBigInteger('category_id');
        $table->unsignedBigInteger('product_id');
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->primary(['category_id','product_id']);

    });

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

    Illuminate\Database\QueryException 

  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') on delete cascade' at line 1 (SQL: alter table `category_product` add constraint `category_product_category_id_foreign` foreign key (`category_id`) references `categories` () on delete cascade)

  at C:\xampp\htdocs\plataforma\vendor\laravel\framework\src\Illuminate\Database\Connection.php:670
    666|         // If an exception occurs when attempting to run a query, we'll format the error
    667|         // message to include the bindings with SQL, which will make this exception a
    668|         // lot more helpful to the developer instead of just the database's errors.
    669|         catch (Exception $e) {
  > 670|             throw new QueryException(
    671|                 $query, $this->prepareBindings($bindings), $e
    672|             );
    673|         }
    674| 

  1   C:\xampp\htdocs\plataforma\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458
      PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') on delete cascade' at line 1")

  2   C:\xampp\htdocs\plataforma\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458
      PDO::prepare("alter table `category_product` add constraint `category_product_category_id_foreign` foreign key (`category_id`) references `categories` () on delete cascade")
PS C:\xampp\htdocs\plataforma> 

1 Ответ

0 голосов
/ 10 апреля 2020

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

 Schema::create('category_product', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('category_id')->onDelete('cascade');
    $table->unsignedBigInteger('product_id')->onDelete('cascade');
});

В двух моделях вы должны распознать сводную таблицу и их внешние ключи -

 <?PHP

 namespace App;

 use Illuminate\Database\Eloquent\Model;
 use App\Product;

 class Category extends Model
{

    public function products()
    {
        return $this->belongsToMany(Product::class,'catgory_product','category_id');
    }
}

И в модели продукта должно быть так

<?PHP

 namespace App;

 use Illuminate\Database\Eloquent\Model;
 use App\Category;

 class Product extends Model
{

    public function categories()
    {
        return $this->belongsToMany(Category::class,'catgory_product','product_id');
    }
}

Документы Laravel могут дать вам правильное понимание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...