简体   繁体   English

使用 Laravel 5.7 将 Json 导入数据库时​​出错

[英]Errors when Importing Json to database with Laravel 5.7

Im having a few problems basically im building a private CRM for my company using laravel 5.7.我在使用 laravel 5.7 为我的公司构建私人 CRM 时遇到了一些问题。

Im trying to build email functionality into it using MailGun.我正在尝试使用 MailGun 将电子邮件功能构建到其中。

I have created the route https://domain.tld/api/email which will accept POST requests only.我创建了只接受 POST 请求的路由https://domain.tld/api/email

I have created the following database migration:我创建了以下数据库迁移:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateEmailsTable extends Migration {

public function up() {
    Schema::create('emails', function (Blueprint $table) {
        $table->increments('id');
        $table->string('recipient');
        $table->string('sender');
        $table->string('subject');
        $table->mediumText('body-plain');
        $table->mediumText('body-html');
        $table->timestamps();
    });
}

public function down() {
    Schema::dropIfExists('emails');
}
}

The Following Model:以下型号:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Email extends Model {

protected $fillable = [
    'recipient',
    'sender',
    'subject',
    'body-plain',
    'body-html',
];
}

and here is my controller:这是我的控制器:

namespace App\Http\Controllers;

use App\Email;
use Illuminate\Http\Request;

class EmailController extends Controller {

public function FromMailgun (Request $request) {

    $email = new Email;

    $email->recipient = $request->recipient;
    $email->sender = $request->sender;
    $email->subject = $request->subject;
    $email->body-plain = $request->body-plain;
    $email->body-html = $request->body-html;
    $email->save();

    return response()->json(['status' => 'ok']);
}
}

Now if I take out the body-plain and body-html elements it works it saves to the database and send http 200 back to mailgun.现在,如果我取出 body-plain 和 body-html 元素,它会保存到数据库并将 http 200 发送回 mailgun。

If i leave them in bare in mind they contain the actual email content I get the following errors.如果我把它们放在心上,它们包含实际的电子邮件内容,我会收到以下错误。

    [2018-10-14 13:52:22] local.ERROR: syntax error, unexpected '=' 
    {"exception":"[object] 
    (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): syntax error, unexpected '=' at 
    /app/Http/Controllers/EmailController.php:18)
    [stacktrace]
    #0 /vendor/composer/ClassLoader.php(322): 
    Composer\\Autoload\\includeFile('/ap...')
    #1 [internal function]: Composer\\Autoload\\ClassLoader- 
    loadClass('App\\\\Http\\\\Contro...')
    #2 [internal function]: spl_autoload_call('App\\\\Http\\\\Contro...')
    #3 /vendor/laravel/framework/src/Illuminate/Container/Container.php(779): 
    ReflectionClass->__construct('App\\\\Http\\\\Contro...')
    #4 /vendor/laravel/framework/src/Illuminate/Container/Container.php(658): 
    Illuminate\\Container\\Container->build('App\\\\Http\\\\Contro...')
    #5 /vendor/laravel/framework/src/Illuminate/Container/Container.php(609): Illuminate\\Container\\Container->resolve('App\\\\Http\\\\Contro...', Array)
#6 vendor/laravel/framework/src/Illuminate/Foundation/Application.php(733): Illuminate\\Container\\Container->make('App\\\\Http\\\\Contro...', Array)
#7 vendor/laravel/framework/src/Illuminate/Routing/Route.php(226): Illuminate\\Foundation\\Application->make('App\\\\Http\\\\Contro...')
#8 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(796): Illuminate\\Routing\\Route->getController()
#9 /vendor/laravel/framework/src/Illuminate/Routing/Route.php(757): Illuminate\\Routing\\Route->controllerMiddleware()
#10 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(692): Illuminate\\Routing\\Route->gatherMiddleware()
#11 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->gatherRouteMiddleware(Object(Illuminate\\Routing\\Route))
#12 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#13 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(622): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#14 /vendor/laravel/framework/src/Illuminate/Routing/Router.php(611): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#15 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#16 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#17 /vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#18 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#19 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#21 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#24 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#27 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#30 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(151): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#33 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#34 /vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#35 /public/index.php(55): 
    Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
    #36 {main}
    "}

MailGun route is set to forward to my endpoint and laravel receives it like this. MailGun 路由设置为转发到我的端点,laravel 像这样接收它。

local.DEBUG: array (
  'recipient' => 'MY PRIVATE EMAIL',
  'sender' => 'MY PRIVATE EMAIL',
  'subject' => 'SUBJECT',
  'from' => 'MY NAME <MY PRIVATE EMAIL>',
  'X-Mailgun-Incoming' => 'Yes',
  'X-Envelope-From' => '<MY PRIVATE EMAIL>',
  'Received' => 'by mail-ua1-f48.google.com with SMTP id x8-v6so17834ual.8        for <RECIPIENT EMAIL>; Sun, 14 Oct 2018 05:04:17 -0700 (PDT)',
  'Dkim-Signature' => 'v=1; a=rsa-sha256; c=relaxed/relaxed;        d=gmail.com; s=20161025;        h=mime-version:from:date:message-id:subject:to;        bh=YwnLof+1LLUtmb50ehTfazjfmsHIbnzfqa2R6ERcSAU=;        b=BOQjGXWKmvaaIZaA8QD3NTwczfoVFU34KdN3WDRudovVRkhAOjuyTsXjWaJXfZGYDe         V4piTDwcsxod1yCB3n0mRCkaltWMyg30tLe4oEUDkmdu5vWYfJzBbfcO38+gz8h5A0NZ         N59ofGTWwRSPi+ZLbmAST4bE1CpJY75iPaIW8qH4y9hQziUZjYPbKqEqNY1ZkGhi4M5z         Kyno7NO6NtOnVPMqsHCLczPwRAt0XyZA2oTkc6ukh0+Py30CIkVWpO4zR5L/eqoX3Ztw         BR7Uv+Te43u6qzYqOnVZfc/uEK9DKEDiDHwiBG/dQ448p7zIYeU5TSkpdaknW6Fb3/K7         QuTQ==',
  'X-Google-Dkim-Signature' => 'v=1; a=rsa-sha256; c=relaxed/relaxed;        d=1e100.net; s=20161025;        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;        bh=YwnLof+1LLUtmb50ehTfazjfmsHIbnzfqa2R6ERcSAU=;        b=NNSRDiDNSqQYC9Red7EH/7Asu07ULMJXDEurCDihKlvlrnHixImxWKEewA3doXB2OF         JO4l4pqShndbCEPVSOSBfhNaiad1ceg3X3CZGIEjsQcZjQXk8NV0jeq0knSTndxfJws6         1gPpD+qzoGyude90dYCM1/XU/ogjY54MsCiNiOojnMDOGrXnGwfC/qVvRqyMyU2HJOIP         yuVniKsunVjTVklmNLjpopmJkUcXR9qCt5mOWXt7wMJZak1hpBaMxpjckjlz28YAeLyJ         QrrfNHoTk6eHb1FdR+A8k9OikiuAu2mg2e/5hJcmeu2s5InW8oZMxALNnN52HSvM+6XD         RzuQ==',
  'X-Gm-Message-State' => 'ABuFfoj+J66gXC1Rcw9fQhjYXDUCbeVXqs02L5QhF/EONi6uGtCWJwlz BBuKWEVk3r8y5PjWq4e9x99QFVII1o9KAa7MNmC889U0',
  'X-Google-Smtp-Source' => 'ACcGV60kmh9NoHFzk1BMswlBxIJ9wMKz5V+ts/irWLKGuwXjXy+POQY+gBJguF9xJCjnNF4S+eRdDc5WsCeAh/y5frE=',
  'X-Received' => 'by 2002:ab0:5950:: with SMTP id o16-v6mr5798261uad.107.1539518656046; Sun, 14 Oct 2018 05:04:16 -0700 (PDT)',
  'Mime-Version' => '1.0',
  'From' => 'MY NAME <MY PRIVATE EMAIL>',
  'Date' => 'Sun, 14 Oct 2018 13:04:05 +0100',
  'Message-Id' => '<CAD0VN25PiWtLDseD5-uxqyN3VkDD7Za9z_7rqPfvR2LT5pvyag@mail.gmail.com>',
  'Subject' => 'SUBJECT',
  'To' => 'RECIPIENT EMAIL',
  'Content-Type' => 'multipart/alternative; boundary="0000000000009e69e505782f1e39"',
  'message-headers' => '[["X-Mailgun-Incoming", "Yes"], ["X-Envelope-From", "<MY PRIVATE EMAIL>"], ["Received", "from mail-ua1-f48.google.com (mail-ua1-f48.google.com [209.85.222.48]) by mxa.mailgun.org with ESMTP id 5bc330c1.7f63741ec470-smtp-in-n02; Sun, 14 Oct 2018 12:04:17 -0000 (UTC)"], ["Received", "by mail-ua1-f48.google.com with SMTP id x8-v6so17834ual.8        for <RECIPIENT EMAIL>; Sun, 14 Oct 2018 05:04:17 -0700 (PDT)"], ["Dkim-Signature", "v=1; a=rsa-sha256; c=relaxed/relaxed;        d=gmail.com; s=20161025;        h=mime-version:from:date:message-id:subject:to;        bh=YwnLof+1LLUtmb50ehTfazjfmsHIbnzfqa2R6ERcSAU=;        b=BOQjGXWKmvaaIZaA8QD3NTwczfoVFU34KdN3WDRudovVRkhAOjuyTsXjWaJXfZGYDe         V4piTDwcsxod1yCB3n0mRCkaltWMyg30tLe4oEUDkmdu5vWYfJzBbfcO38+gz8h5A0NZ         N59ofGTWwRSPi+ZLbmAST4bE1CpJY75iPaIW8qH4y9hQziUZjYPbKqEqNY1ZkGhi4M5z         Kyno7NO6NtOnVPMqsHCLczPwRAt0XyZA2oTkc6ukh0+Py30CIkVWpO4zR5L/eqoX3Ztw         BR7Uv+Te43u6qzYqOnVZfc/uEK9DKEDiDHwiBG/dQ448p7zIYeU5TSkpdaknW6Fb3/K7         QuTQ=="], ["X-Google-Dkim-Signature", "v=1; a=rsa-sha256; c=relaxed/relaxed;        d=1e100.net; s=20161025;        h=x-gm-message-state:mime-version:from:date:message-id:subject:to;        bh=YwnLof+1LLUtmb50ehTfazjfmsHIbnzfqa2R6ERcSAU=;        b=NNSRDiDNSqQYC9Red7EH/7Asu07ULMJXDEurCDihKlvlrnHixImxWKEewA3doXB2OF         JO4l4pqShndbCEPVSOSBfhNaiad1ceg3X3CZGIEjsQcZjQXk8NV0jeq0knSTndxfJws6         1gPpD+qzoGyude90dYCM1/XU/ogjY54MsCiNiOojnMDOGrXnGwfC/qVvRqyMyU2HJOIP         yuVniKsunVjTVklmNLjpopmJkUcXR9qCt5mOWXt7wMJZak1hpBaMxpjckjlz28YAeLyJ         QrrfNHoTk6eHb1FdR+A8k9OikiuAu2mg2e/5hJcmeu2s5InW8oZMxALNnN52HSvM+6XD         RzuQ=="], ["X-Gm-Message-State", "ABuFfoj+J66gXC1Rcw9fQhjYXDUCbeVXqs02L5QhF/EONi6uGtCWJwlz\\tBBuKWEVk3r8y5PjWq4e9x99QFVII1o9KAa7MNmC889U0"], ["X-Google-Smtp-Source", "ACcGV60kmh9NoHFzk1BMswlBxIJ9wMKz5V+ts/irWLKGuwXjXy+POQY+gBJguF9xJCjnNF4S+eRdDc5WsCeAh/y5frE="], ["X-Received", "by 2002:ab0:5950:: with SMTP id o16-v6mr5798261uad.107.1539518656046; Sun, 14 Oct 2018 05:04:16 -0700 (PDT)"], ["Mime-Version", "1.0"], ["From", "MY NAME <MY PRIVATE EMAIL>"], ["Date", "Sun, 14 Oct 2018 13:04:05 +0100"], ["Message-Id", "<CAD0VN25PiWtLDseD5-uxqyN3VkDD7Za9z_7rqPfvR2LT5pvyag@mail.gmail.com>"], ["Subject", "fdre"], ["To", "RECIPIENT EMAIL"], ["Content-Type", "multipart/alternative; boundary=\\"0000000000009e69e505782f1e39\\""]]',
  'timestamp' => 'TIMESTAMP',
  'token' => 'HASHED TOKEN',
  'signature' => 'HASHED SIGNATURE',
  'body-plain' => 'Stackoverflow Community Please Help',
  'body-html' => '<div dir="ltr">Stackoverflow Community Please Help</div>',
  'stripped-html' => '<div dir="ltr">Stackoverflow Community Please Help</div>',
  'stripped-text' => 'Stackoverflow Community Please Help',
  'stripped-signature' => NULL,
)

Any idea why this error is being caused and if so how to fix it?知道为什么会导致此错误,如果是,如何解决?

Thanks to all who contribute to fixing this issue.感谢所有为解决此问题做出贡献的人。

Not 100% sure but as far as I know you can't have dashed in property names unless you escape them.不是 100% 肯定,但据我所知,除非你逃避它们,否则你不能在属性名称中使用。

Try changing it to this:尝试将其更改为:

$email->{"body-plain"} = $request->{"body-plain"};
$email->{"body-html"} = $request->{"body-html"};

Request also have method for getting a variable instead of using magic methods. Request也有获取变量的方法,而不是使用魔法方法。

$email->{"body-plain"} = $request->get("body-plain");
$email->{"body-html"} = $request->get("body-html");

When you use $fillable property and want to fill only properties that are in fillable instead of:当您使用$fillable属性并只想填充$fillable属性而不是:

$email = new Email; $email = 新邮箱;

$email->recipient = $request->recipient;
$email->sender = $request->sender;
$email->subject = $request->subject;
$email->body-plain = $request->body-plain;
$email->body-html = $request->body-html;
$email->save();

you can just use:你可以使用:

$email = Email::create($request->all());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM