Laravel 存储函数更改返回数据

Posted

技术标签:

【中文标题】Laravel 存储函数更改返回数据【英文标题】:Laravel store function changes return data 【发布时间】:2014-07-17 23:08:27 【问题描述】:

很确定我在这里做错了什么,只是不知道是什么或在哪里。

我有一个 Laravel 控制器,它处理 ajax 发布请求并将 curl 请求的结果返回给该 ajax 调用:

public function store()

        /** Receive long and lat through ajax **/
        $long = Input::get('longitude');
        $lat = Input::get('latitude');
        $location = $lat . "," . $long;
        $url = blablable;
        $curl = curl_init();
        curl_setopt_array($curl, 
            array(
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_URL => $url
                ));
        $result = curl_exec($curl);
        return $result;
        curl_close($curl);

这可行:curl 返回一个 JSON 数组,该数组被传递回 ajax 调用。

但是现在我想将传入的数据保存到数据库中:

$location = new Location();
$location->latitude = Input::get('latitude');
$location->longitude = Input::get('longitude');
$location->save();

我在函数顶部添加了这 4 行,数据被保存到数据库中,但 JSON 数组被抓取,不知何故 <!-- app/models/Location.php --> 被添加到返回顶部,使 JSON 数组无效。

不知道是什么原因造成的,因此非常感谢任何提示或建议!

-- 编辑1--

Input::all(); 的结果是

array(2) 
 ["latitude"]=>
 string(10) "50.8809794"
 ["longitude"]=>
 string(9) "4.6920714"

【问题讨论】:

你能把dd(Input::all())的结果贴在store方法的开头吗? 另外,curl_close($curl); 应该在 return 语句之前。 使用 Input::all() 的结果编辑了问题。在返回之前关闭 curl。 返回前的dd($result)呢? $location 在保存后变为Eloquent 对象。你应该调用 $location->toJson()?也许我不明白你:你是在说 Input::all();保存位置后格式错误? 【参考方案1】:

这不是一种解决方案,而是一种清理代码的方式:

    您不需要使用curl,可以改为使用Request::create()Route::dispatch()。 您应该在模型中使用protected $fillable 属性来清理新条目。

你的代码可以变成:

public function store()

    // This is for saving the entry
    $location = new Location();
    $location->fill(Input::all());
    $location->save();

    // This is for the cURL 
    // (assuming this is a GET requst, but other methods are available)
    $request = Request::create('/path/to/url/', 'GET');

    $response = Route::dispatch($request);

    // Do stuff with the $response or just return it
    return $response;

【讨论】:

以上是关于Laravel 存储函数更改返回数据的主要内容,如果未能解决你的问题,请参考以下文章

如何存储我从 Postgres 存储函数返回的数据

从标量 SQL 函数返回两个值

调用返回值的数据库存储函数或存储过程

SQL函数和存储过程的区别

ORACLE存储过程里可以声明过程和函数吗

Oracle数据库基础--存储过程和函数