![](/img/trans.png)
[英]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.