Вставка нулевых значений при заполнении приложения laravel из файла json - PullRequest
0 голосов
/ 16 февраля 2020

В моем приложении laravel есть файл json, который я использую для добавления некоторых продуктов в свою базу данных. По какой-то причине, когда я пытаюсь сохранить продукт, я вставляю пустые значения в поля title и productcategory_id, даже если значения массива есть, json преобразуется в массив с json_decode.

Это мои логи c:

<?php
use Illuminate\Database\Seeder;
use App\Models\Product;


class ProductsSeeder extends Seeder
{


    public function run()
    {
        $json = File::get(base_path().'/json/Products.json');

        $products = json_decode($json, true);

        var_dump($products);

        foreach ($products as $product)
        {
            echo($product['title']);
            echo($product['productcategory_id']);
            $product = new Product();
            $product->title = $product['title'];
            $product->productcategory_id = $product['productcategory_id'];
            $product->save();
        }
    }
}

Выдержка из моего json файла:

[
    { "productcategory_id" : 1, "title":"Hamb.Ternera Maxi"},
    { "productcategory_id" : 1, "title":"Hamb. Ternera Doble"}, 
    { "productcategory_id" : 1, "title":"Hamb. Pollo"}, 
    { "productcategory_id" : 1, "title":"Hamb. Mini"}, 
    { "productcategory_id" : 1, "title":"Camp. clásico"}, 
    { "productcategory_id" : 1, "title":"Camp. ternera"}, 
]

Как видите, я использую var_dump, чтобы увидеть данные json правильно преобразуются в массив php asso c, но я все еще получаю сообщение об ошибке. Полное сообщение об ошибке в моей оболочке:

   Illuminate\Database\QueryException  : SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: insert into `products` (`title`, `productcategory_id`, `updated_at`, `created_at`) values (, , 2020-02-16 20:25:51, 2020-02-16 20:25:51))

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

  Exception trace:

  1   PDOException::("SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null")
      C:\xampp\htdocs\dtcburger\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  2   PDOStatement::execute()
      C:\xampp\htdocs\dtcburger\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  Please use the argument -v to see more details.

1 Ответ

1 голос
/ 16 февраля 2020

Проблема, вероятно, в том, что вы используете ту же переменную для l oop и для получения значения. попробуй так:

foreach ($products as $product)
    {
        echo($product['title']);
        echo($product['productcategory_id']);
        $product_n = new Product();
        $product_n->title = $product['title'];
        $product_n->productcategory_id = $product['productcategory_id'];
        $product_n->save();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...