簡體   English   中英

如何創建Laravel雄辯的實體的空實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM