未使用 Lumen 将数据输入数据库 (Laravel)
data not entered to database using Lumen (Laravel)
我是 Laravel 和 Lumen 框架的新手。
我正在尝试使用 Lumen API 创建一个 framework.I 想要将数据输入数据库。但是数据库更新了 id,date_created 和 date_updated。但是我输入的数据并没有插入那里。相反,它对字符串输入显示空白,对整数输入显示 0。
这是我的控制器代码:
<?php
namespace App\Http\Controllers;
use App\Place;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PlaceController extends Controller{
public function savePlace(Request $request){
$place = Place::create($request->all());
return response()->json($place);
}
}
这是我的迁移代码:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePlacesTable extends Migration
{
public function up()
{
Schema::create('places', function (Blueprint $table) {
$table->increments('id');
$table->string('place');
$table->integer('pincode');
$table->integer('bed');
$table->integer('square_feet');
$table->integer('price');
$table->timestamps();
});
}
public function down()
{
Schema::drop('places');
}
}
我做的对吗?我应该与此一起使用任何其他代码吗?
请帮忙。
提前致谢。
编辑:
这是我的房源模型代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Place extends Model{
protected $fillable = ['place', 'pincode', 'bed', 'square_feet', 'price'];
}
编辑 2:
我正在从 angularjs 应用程序(离子框架)发送请求。
这是我的 http.post 代码:
app.controller('NavCtrl', ['$scope', '$http', '$location', '$window', function($scope,$http,$location,$window){
$scope.data = {};
$scope.savedata = function(){
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: $headers,
data : {'place':$scope.data.place,'pincode':$scope.data.pincode,'bed':$scope.data.bed,'square_feet':$scope.data.square_feet,'price':$scope.data.price}
})
.success(function(data,status,headers,config){
console.log(data);
$scope.navigat('/success.html');
})
.error(function(){
alert("failed");
})
};
$scope.navigat = function(url){
$window.location.href=url;
};
}]);
这是我的 routes.php 代码:
<?php
header("Access-Control-Allow-Origin: *");
$app->get('/', function () use ($app) {
return $app->version();
});
$app->post('lumen/public/add','PlaceController@savePlace');
根据 this answer,问题似乎是 angular POST 处理数据的方式。基本上,它试图将 POST 数据作为 JSON,但是 PHP 没有做任何事情将 JSON 数据转换为请求查询数据。
要使其正常工作,您需要做两件事。
首先,您需要将 Content-Type
header 更改为 application/x-www-form-urlencoded
。但是,仅仅更改内容类型 header 并不能解决问题,因为 angular 仍然 POST 将数据作为 JSON 请求。
因此,其次,您需要将发布的数据从JSON格式更改为查询字符串格式(name=value&name=value)。
因此,将您的代码更新为如下内容:
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: { "Content-Type" : "application/x-www-form-urlencoded" },
data : [
'place=' + encodeURIComponent($scope.data.place),
'pincode=' + encodeURIComponent($scope.data.pincode),
'bed=' + encodeURIComponent($scope.data.bed),
'square_feet=' + encodeURIComponent($scope.data.square_feet),
'price=' + encodeURIComponent($scope.data.price)
].join('&')
})
我是 Laravel 和 Lumen 框架的新手。
我正在尝试使用 Lumen API 创建一个 framework.I 想要将数据输入数据库。但是数据库更新了 id,date_created 和 date_updated。但是我输入的数据并没有插入那里。相反,它对字符串输入显示空白,对整数输入显示 0。
这是我的控制器代码:
<?php
namespace App\Http\Controllers;
use App\Place;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PlaceController extends Controller{
public function savePlace(Request $request){
$place = Place::create($request->all());
return response()->json($place);
}
}
这是我的迁移代码:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePlacesTable extends Migration
{
public function up()
{
Schema::create('places', function (Blueprint $table) {
$table->increments('id');
$table->string('place');
$table->integer('pincode');
$table->integer('bed');
$table->integer('square_feet');
$table->integer('price');
$table->timestamps();
});
}
public function down()
{
Schema::drop('places');
}
}
我做的对吗?我应该与此一起使用任何其他代码吗?
请帮忙。
提前致谢。
编辑:
这是我的房源模型代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Place extends Model{
protected $fillable = ['place', 'pincode', 'bed', 'square_feet', 'price'];
}
编辑 2:
我正在从 angularjs 应用程序(离子框架)发送请求。
这是我的 http.post 代码:
app.controller('NavCtrl', ['$scope', '$http', '$location', '$window', function($scope,$http,$location,$window){
$scope.data = {};
$scope.savedata = function(){
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: $headers,
data : {'place':$scope.data.place,'pincode':$scope.data.pincode,'bed':$scope.data.bed,'square_feet':$scope.data.square_feet,'price':$scope.data.price}
})
.success(function(data,status,headers,config){
console.log(data);
$scope.navigat('/success.html');
})
.error(function(){
alert("failed");
})
};
$scope.navigat = function(url){
$window.location.href=url;
};
}]);
这是我的 routes.php 代码:
<?php
header("Access-Control-Allow-Origin: *");
$app->get('/', function () use ($app) {
return $app->version();
});
$app->post('lumen/public/add','PlaceController@savePlace');
根据 this answer,问题似乎是 angular POST 处理数据的方式。基本上,它试图将 POST 数据作为 JSON,但是 PHP 没有做任何事情将 JSON 数据转换为请求查询数据。
要使其正常工作,您需要做两件事。
首先,您需要将 Content-Type
header 更改为 application/x-www-form-urlencoded
。但是,仅仅更改内容类型 header 并不能解决问题,因为 angular 仍然 POST 将数据作为 JSON 请求。
因此,其次,您需要将发布的数据从JSON格式更改为查询字符串格式(name=value&name=value)。
因此,将您的代码更新为如下内容:
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: { "Content-Type" : "application/x-www-form-urlencoded" },
data : [
'place=' + encodeURIComponent($scope.data.place),
'pincode=' + encodeURIComponent($scope.data.pincode),
'bed=' + encodeURIComponent($scope.data.bed),
'square_feet=' + encodeURIComponent($scope.data.square_feet),
'price=' + encodeURIComponent($scope.data.price)
].join('&')
})