繁体   English   中英

如何在 Laravel 的数据库中将对象保存为 json?

[英]How to make a job to save an object as json in the database in Laravel?

我正在尝试使用 handle 方法将 HTTP 响应作为 json 保存在数据库中的工作,这是我的代码:

   public function handle()
{
    $syncedResults = $this->guzzleGet();
    Rfm::truncate();
    
    /**
     * @var \Illuminate\Database\Eloquent\Model $rfm
     */
    Rfm::create(['RFM' => $syncedResults]);

 
}

public function guzzleGet()
{
    $aData = [];
    $sCursor = null;

    while($aResponse = $this->guzzleGetData($sCursor))
    {
        if(empty($aResponse['data']))
        {
            break;
        }
        else
        {

            $aData = array_merge($aData, $aResponse['data']);


            if(empty($aResponse['meta']['next_cursor']))
            {
                break;
            }
            else
            {
                $sCursor = $aResponse['meta']['next_cursor'];
            }
        }
    }
    

    
    return json_encode($aData);

这是我的模型:

<?PHP

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Rfm extends Model
{
use HasFactory;
protected $fillable = ['RFM'];  
}

和迁移:

   public function up()
{
    Schema::create('rfms', function (Blueprint $table) {
        $table->id();
        $table->json('RFM');
        $table->timestamps();
    });
}

现在我做了一个签名命令来运行工人,但每次它在日志中出现这个错误时失败:

TypeError: Illuminate\Database\Grammar::parameterize(): Argument #1 ($values) must be of type array, string given, called in C:\xampp\htdocs\clv\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 920 and defined in C:\xampp\htdocs\clv\vendor\laravel\framework\src\Illuminate\Database\Grammar.php:136

我想知道我是不是做错了什么?!

与此同时,我找到了一种解决方法:

只需使用 Query Builder 而不是 eloquent 插入数据,就像这样:

public function handle()
{
    $syncedResults = $this->guzzleGet();
    Rfm::truncate();
    
    /**
     * @var \Illuminate\Database\Eloquent\Model $rfm
     */
    DB::table('rfms')->insert(['RFM' => json_encode($syncedResults)]);

}

JSON 字段接受数组数据类型,但您在传递数组之前将其转换为字符串,

所以只需将guzzleGet()的返回从return json_encode($aData); return $aData;

暂无
暂无

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

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