如何创建 Laravel Eloquent 实体的空实例
Posted
技术标签:
【中文标题】如何创建 Laravel Eloquent 实体的空实例【英文标题】:How to create empty instance of Laravel Eloquent entity 【发布时间】:2016-11-20 09:16:22 【问题描述】:我有 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 对象返回。这个想法是 Laravel 的代码对该实体进行所有必要的默认分配(例如,来自生成器的 ID、根据用户偏好的默认价格类型、根据地区的默认货币等)并返回可以从 javascript 界面使用的实体。 Javascript 接口稍后将决定是否丢弃该实体,是否继续使用该实体,并最终使用适当的插入方法或 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 转换为对象...
【问题讨论】:
【参考方案1】:如果您想为您的实例设置自定义值,
转到您的模型并添加此
//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);
【讨论】:
【参考方案2】:我需要为一个奇怪的小黑客做同样的事情。我使用以下内容创建了一个使用$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());
【讨论】:
以上是关于如何创建 Laravel Eloquent 实体的空实例的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Eloquent 的情况下创建 Laravel 模型?
Payum - Laravel 4 的包。如何使用 Eloquent 而不是 FilesystemStorage 创建模型数据?
如何在 Laravel 4 中手动创建一个新的空 Eloquent 集合