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)
检查数组分数值的确切位置