How to create empty instance of Laravel Eloquent entity
Solution 1
If you want to set custom values to your instance,
Go to your model and add this
//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'];
the change this code:
class Contracts extends Controller
public function create() {
$contract = new Contract;
return json_encode($contract);
}
}
to this:
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);
}
}
If your values are fixed, you can do this in your contract model class
//set default attributes
protected $attributes = array(
'ID' => 1111,
'CONTRACT_DATE' => null,
'PRICE_TYPE' => '2',
'AMOUNT' => 0.0
);
then you can use your code to return an instance filled with the default values above
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);
}
}
Solution 2
I needed to do the same for a weird little hack. I used the below to create an empty model instance using the $fillable
attributes.
$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());
TomR
Updated on June 09, 2022Comments
-
TomR almost 2 years
I have the Laravel PHP code:
class Contract extends Model { public $table = "CONTRACTS"; public $timestamps = false; protected $primaryKey = 'ID'; protected $fillable = array("ID", "CONTRACT_DATE", "PRICE_TYPE", "AMOUNT"); }
I would like Laravel controller to have special method that returns empty instance of Contracts entity as json object. The idea is that Laravels's code make all the necessary default assignments to this entity (e.g. ID from the generator, default price type according to user preferences, default currency according to region and so on) and returns entity that can be usable from Javascript interface. Javascript interface later will decided whether to discard this entity of whether to continue with this entity and to finally save (insert) it with the appropriate insert method or Laravelt REST API.
The problem is - how to create empty instance of Laravel model? E.g.
class Contracts extends Controller public function create() { $contract = new Contract; return json_encode($contract); } }
code simply returns
[]
But I would like to have something like this:
{"ID":1111, "CONTRACT_DATE":null, "PRICE_TYPE":"2", "AMOUNT":0.0}
Is that possible with Laravel. One solution could be use of raw SQL that returns empty values and then one can hope that Laravel can translate this SQL into object...