Tom*_*omR 1 php rest json laravel laravel-5.2
我有Laravel PHP代码:
class Contract extends Model
{
public $table = "CONTRACTS";
public $timestamps = false;
protected $primaryKey = 'ID';
protected $fillable = array("ID", "CONTRACT_DATE", "PRICE_TYPE", "AMOUNT");
}
Run Code Online (Sandbox Code Playgroud)
我希望Laravel控制器有一个特殊的方法,它将Contracts实体的空实例作为json对象返回.我们的想法是,Laravels的代码为此实体提供所有必要的默认分配(例如,来自生成器的ID,根据用户首选项的默认价格类型,根据区域的默认货币等),并返回可从Javascript界面使用的实体.Javascript接口稍后将决定是否丢弃此实体是否继续使用此实体并最终使用适当的插入方法或Laravelt REST API保存(插入)它.
问题是 - 如何创建Laravel模型的空实例?例如
class Contracts extends Controller
public function create() {
$contract = new Contract;
return json_encode($contract);
}
}
Run Code Online (Sandbox Code Playgroud)
代码只是返回
[]
Run Code Online (Sandbox Code Playgroud)
但我希望有这样的东西:
{"ID":1111,
"CONTRACT_DATE":null,
"PRICE_TYPE":"2",
"AMOUNT":0.0}
Run Code Online (Sandbox Code Playgroud)
这可能与Laravel有关.一种解决方案可能是使用返回空值的原始SQL,然后可以希望Laravel可以将此SQL转换为对象...
转到您的模型并添加此项
//these are the name of the column of contract table that you wanna fill in
//if ID is an auto increment column remove it!
protected $fillable = [
'ID','CONTRACT_DATE','PRICE_TYPE','AMOUNT'];
Run Code Online (Sandbox Code Playgroud)
更改此代码:
class Contracts extends Controller
public function create() {
$contract = new Contract;
return json_encode($contract);
}
}
Run Code Online (Sandbox Code Playgroud)
对此:
class Contracts extends Controller
public function create() {
$contract = new Contract;
$contract->ID = 1111;
$contract->CONTRACT_DATE = null;
$contract->PRICE_TYPE = '2';
$contract->AMOUNT = 0.0;
//$contract->save();//this line will insert this instance into db
return response()->json($contract);
}
}
Run Code Online (Sandbox Code Playgroud)
//set default attributes
protected $attributes = array(
'ID' => 1111,
'CONTRACT_DATE' => null,
'PRICE_TYPE' => '2',
'AMOUNT' => 0.0
);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用你的代码返回一个填充了上面默认值的实例
class Contracts extends Controller
public function create() {
$contract = new Contract;
/*return json_encode($contract);*/
//why use laravel response? because it sets other header parameters for you :)
return response()->json($contract);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8879 次 |
| 最近记录: |