Php 无法将对象插入Laravel中的数据库

Php 无法将对象插入Laravel中的数据库,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我是一名laravel初学者,没有找到解决问题的方法 我创建了一个表单,将urlname输入到数据库中——效果很好。 但是对于pagespeed变量,我总是得到以下错误: 这是我的控制器的一部分: //Create URL $url = new URL; $url->urlname= $request->input('urlname'); $url->pagespeed= $pspeed; //Save url $url->save(); //Return redir

我是一名
laravel
初学者,没有找到解决问题的方法

我创建了一个表单,将urlname输入到
数据库中
——效果很好。 但是对于
pagespeed
变量,我总是得到以下错误:

这是我的控制器的一部分:

//Create URL
$url = new URL;
$url->urlname= $request->input('urlname');
$url->pagespeed= $pspeed;

//Save url
$url->save();

//Return redirect
return redirect('/');
我在迁移中添加了以下内容:

public function up()
{

}

也许有人可以帮我解决这个问题。

您需要保存
getResults()
函数结果而不是整个对象,请尝试以下方法:

public function create(Request $request) {
    $pspeed = new \PageSpeed\Insights\Service();
    $pspeedResult = $pspeed->getResults('https://www.example.com');

    //Create URL
    $url = new URL;
    $url->urlname = $request->input('urlname');
    $url->pagespeed = json_encode($pspeedResult);

    //Save url
    $url->save();

    //Return redirect
    return redirect('/');
}
从数据库取回数据时,请记住将数据从json解码到数组
$data=json\u decode($url->pagespeed,true)

也可以使用手动解码/编码数组

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class URL extends Model
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'pagespeed' => 'array',
    ];
}

您需要保存
getResults()
函数结果而不是整个对象,请尝试以下方法:

public function create(Request $request) {
    $pspeed = new \PageSpeed\Insights\Service();
    $pspeedResult = $pspeed->getResults('https://www.example.com');

    //Create URL
    $url = new URL;
    $url->urlname = $request->input('urlname');
    $url->pagespeed = json_encode($pspeedResult);

    //Save url
    $url->save();

    //Return redirect
    return redirect('/');
}
从数据库取回数据时,请记住将数据从json解码到数组
$data=json\u decode($url->pagespeed,true)

也可以使用手动解码/编码数组

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class URL extends Model
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'pagespeed' => 'array',
    ];
}

解决办法可以是:

$pspeed = new \PageSpeed\Insights\Service();

// Assigning it to a variable:
$results = $pspeed->getResults('https://www.example.com');

...

// Storing the results, instead of the PageSpeed object
$url->pagespeed= $results;
请注意,getResults(…)返回一个数组

解决办法可以是:

$pspeed = new \PageSpeed\Insights\Service();

// Assigning it to a variable:
$results = $pspeed->getResults('https://www.example.com');

...

// Storing the results, instead of the PageSpeed object
$url->pagespeed= $results;

请注意,getResults(…)返回一个数组。

您需要首先用json对对象进行编码,以便将其存储在字符串类型列中

所以

需要换成

$results = $pspeed->getResults('https://www.example.com');
$url->pagespeed= json_encode($results );

您需要首先用json对对象进行编码,以便将其存储在字符串类型列中

所以

需要换成

$results = $pspeed->getResults('https://www.example.com');
$url->pagespeed= json_encode($results );

你能显示你的模型URL吗?是否设置了$fillable属性?此外,错误提示$pspeed是一个对象,您可以将对象推送到字符串字段。尝试使用var_dump来查看可以使用什么,或者使用json_encode()将其(或serialize())使其成为字符串。如果这样做,请将迁移中的类型更改为text(),因为string是一个最大为255个字符的varcharhttps://www.example.com');
到任何变量,然后
print_r()
echo
该变量,并检查您得到的确切数组或json字符串,然后进一步执行。您可以显示您的模型URL吗?是否设置了$fillable属性?此外,错误提示$pspeed是一个对象,您可以将对象推送到字符串字段。尝试使用var_dump来查看可以使用什么,或者使用json_encode()将其(或serialize())使其成为字符串。如果这样做,请将迁移中的类型更改为text(),因为string是一个最大为255个字符的varcharhttps://www.example.com');
到任何变量,然后
print_r()
echo
该变量,并检查得到的是什么数组或json字符串,然后再做进一步的操作。现在我得到以下内容:SQLSTATE[22001]:字符串数据,右截断:1406数据对于第1行的“pagespeed”列太长是否可以只在pagespeed列中存储速度分数?错误消息说这将被插入到以下行:{“种类”:“pagespeedonline#结果”,“id”:“https:\/\/www.example.com\/”,“responseCode”:200,“标题”:“示例域”,“规则组”:{“速度”:{“分数”:100},“pageStats”:{“numberResources”:1,“numberHosts”:1,等等。您需要更新数据库模式,
$table->string('pagespeed'));
string的容量太小,请使用
text()
而不是现在我得到的是:SQLSTATE[22001]:字符串数据,右截断:1406数据对于第1行的“pagespeed”列太长是否可以只在pagespeed列中存储速度分数?错误消息说这将插入到行:{“种类”:“pagespeedonline#result”,“id”:“https:\/\/www.example.com\/”,“responseCode”:200,“title”:“示例域”,“规则组”:{“SPEED”:{“score”:100},“pageStats”:{“numberResources”:1,“numberHosts”:1等。您需要更新数据库架构,
$table->string('pagespeed');
string容量太小,请使用
text()
insteadthx!将列类型更改为text()…我现在在列中获取了大量数据。是否可以只筛选“分数”?现在在列中获取:“{”种类“:“pagespeedonline”\35;结果“,”id“:“https:\/\/www.example.com\/”,“responseCode”:200,“title:“示例域”,“规则组”:“{”速度“{”分数“:100}”,pageStats:{”numberResources“:1,“numberHosts“:1,“totalRequestBytes”:“37”等。尝试只保存分数然后
$url->pagespeed=$pspeedResult['score']
$url->pagespeed=Arr::get($pspeedResult,'score')
@veNuker thx以获得您的帮助,但我会得到:未定义的索引:使用
$url->$pagespeed=$pspeedResult['score']
$url->pagespeed=Arr::get($pspeedResult,'score')
给我:Class'App\Http\Controllers\Arr'找不到
$pspeedResult['ruleGroups']['SPEED']['score']
作为将来的参考,你可以使用
dd($pspeedResult)
来检查数组分数值的确切位置。作为旁注,“Arr Class not found”“,您需要先导入此类,与导入URL类类似。thx!将列类型更改为text()…我现在在列中获取了大量数据。是否可以仅筛选“分数”?现在在列中获得:“{”种类“:“pagespeedonline”\35;结果”,“id:“https:\/\/www.example.com\/”,“responseCode”:200,“标题”:“示例域”、“规则组”:{“速度”:{“分数”:100}},“页面统计”:{“数字资源”:1,“数字霍斯特”:1,“totalRequestBytes”:“37”等。尝试只保存分数,然后
$url->pagespeed=$pspeedResult['score']
$url->pagespeed=Arr::get($pspeedResult,'score'))
@veNuker-thx谢谢你的帮助,但我会得到:未定义索引:使用
$url->pagespeed=$pspeedResult['score']
$url->pagespeed=Arr::get($pspeedResult,'score')时的分数。
给了我:Class'App\Http\Controllers\Arr'找不到
$pspeedResult['ruleGroups']['SPEED'['score']
为了便于将来参考,您可以使用
dd($pspeedResult)
检查数组分数值的确切位置