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

时间:2017-11-15 11:53:17

标签: php mysql laravel laravel-5

我是laravel初学者,没有为我的问题找到解决方案。

我创建了一个表单,将urlname输入database - 工作正常。 但对于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()
{

}

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

3 个答案:

答案 0 :(得分:0)

您需要保存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_decode($url->pagespeed, true);

您也可以使用mutators代替手动解码/编码数组。

<?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',
    ];
}

答案 1 :(得分:0)

// You are making a new PageSpeed object
$pspeed = new \PageSpeed\Insights\Service();

// Next you are getting the results for an url.
// You are not assigning the results to any variable
$pspeed->getResults('https://www.example.com');

...

// Now you are trying to fill the $url->pagespeed with 
// the PageSpeed object instead of the results.
// This cause the error.
$url->pagespeed= $pspeed;

解决方案可能是:

$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(...)返回一个数组。

答案 2 :(得分:0)

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

所以

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

需要改为

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