[英]How to manually create a new empty Eloquent Collection in Laravel 4
[英]How to create empty instance of Laravel Eloquent entity
我有Laravel PHP代码:
class Contract extends Model
{
public $table = "CONTRACTS";
public $timestamps = false;
protected $primaryKey = 'ID';
protected $fillable = array("ID", "CONTRACT_DATE", "PRICE_TYPE", "AMOUNT");
}
我希望Laravel控制器具有特殊的方法,该方法返回Contracts实体的空实例作为json对象。 这个想法是Laravels的代码对该实体进行所有必要的默认分配(例如,生成器的ID,根据用户偏好的默认价格类型,根据地区的默认货币等),并返回可从Javascript界面使用的实体。 稍后,Javascript接口将决定是否放弃该实体以继续该实体,并最终使用适当的insert方法或Laravelt REST API保存(插入)该实体。
问题是- 如何创建Laravel模型的空实例? 例如
class Contracts extends Controller
public function create() {
$contract = new Contract;
return json_encode($contract);
}
}
代码只是返回
[]
但是我想要这样的东西:
{"ID":1111,
"CONTRACT_DATE":null,
"PRICE_TYPE":"2",
"AMOUNT":0.0}
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'];
更改此代码:
class Contracts extends Controller
public function create() {
$contract = new Contract;
return json_encode($contract);
}
}
对此:
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);
}
}
//set default attributes
protected $attributes = array(
'ID' => 1111,
'CONTRACT_DATE' => null,
'PRICE_TYPE' => '2',
'AMOUNT' => 0.0
);
那么您可以使用您的代码返回一个实例,该实例填充上面的默认值
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);
}
}
对于怪异的小技巧,我也需要这样做。 我使用下面的代码使用$fillable
属性创建一个空的模型实例。
$quote_request = new QuoteRequest();
$data = array_combine(
$quote_request->getFillable(),
array_fill(0, count($quote_request->getFillable()), null)
);
$quote_request->fill($data);
dd($quote_request->toArray());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.