Проблема с зоной сброса Laravel для загрузки с product_id - PullRequest
0 голосов
/ 02 октября 2018

Предположим, у меня есть один продукт, и у него много изображений.Я использовал Dropzone JS, и если я загружаю изображения, то все в порядке, но если вы хотите сохранить с product_id, то он передает нулевое значение.без передачи какого-либо значения его работает нормально.так как я могу хранить как имя изображения, так и product_id одновременно?Вот мой контроллер:

 public function store(Request $request)
    {
        if ($request->hasFile('file')){

            $file= $request->file;
            $fileName = $file->getClientOriginalName();
            $fileName =  time() .'-'.$fileName;
            $productImage = public_path("uploads/products/{$fileName}"); // get previous image from folder
            if (File::exists($productImage)) { // unlink or remove previous image from folder
                unlink($productImage);
            }
            $file->move('public/uploads/products/',$fileName);
            $image  = new Image();
            $image->image = $fileName;
            $image->product_id = $request->product_id;
            $image->save();

//            return redirect()->route('product.index');

        }
}

Схема базы данных:

 Schema::create('images', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image');
            $table->integer('product_id')->unsigned()->nullable();
            $table->foreign('product_id')->references('id')->on('products')->onUpdate('cascade')->onDelete('cascade');
            $table->timestamps();
        });

Ошибка:

сообщение: "SQLSTATE [23000]: нарушение ограничения целостности: 1452Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (eshop. images, CONSTRAINT images_product_id_foreign FOREIGN KEY (product_id) ССЫЛКИ products (id) ВКЛSQL: вставить в значения images (image, product_id, updated_at, created_at) (1538483231-blog-1-3.png, 123, 2018-10-02 12:27:11, 2018-10-02 12:27:11)) "

Ответы [ 4 ]

0 голосов
/ 02 октября 2018

Mysql выдает «Невозможно добавить или обновить дочернюю строку: не удается выполнить ограничение внешнего ключа», поскольку в таблице продуктов нет продукта с идентификатором 123.Сначала вам нужно создать этот продукт.После этого вы можете создать для него реляционные записи

0 голосов
/ 02 октября 2018

Я могу вспомнить 3 причины, которые могут иметь ссылку на вашу проблему:

1: холодно, что вам нужно сделать столбец в модели заполняемым.

2: потому чтоу вас есть это как foreign_key вы должны установить id автоматически, а не с помощью вставки (происходит из источника) или отменить привязку значения.

3: это означает, что вводимое вами значение не существует в исходной таблице, поскольку вы получаете эту ошибку.

Удачи

0 голосов
/ 02 октября 2018

при использовании @blade

<input type="hidden" name="product_id" class="form-control m-input" value="{{$id}}">

вместо

<input type="hidden" name="product_id" class="form-control m-input" value="123">
0 голосов
/ 02 октября 2018

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

Если вы хотите обновить, если сначала удалите таблицу, внешний ключ которой имел (images).После того, как вы сможете обновить эту products таблицу.

...