Reputation: 22683
What is the proper way to create new models in Laravel 5 controllers? I don't want to use models classes names directly, but inject them to controller's constructor instead, like this:
public function __construct(User $user) {
$this->user = $user;
// ...
}
To operate on the User model, I would normally use controller's property, like this:
$target = $this->user
->women()
->whereBetween('age', [18, 29])
->get();
But how can I create a new model using $this->user
? Normally I prefer to use new User;
and assign properties to then use $user->save();
. But this way it's rather impossible, isn't it? I know there's create()
method, which would work in this case, like this:
$girl = $this->user->create([
'name' => 'Jessica Hottie',
'age' => 21
]);
But this way I'm losing possibility to use associate()
method etc.
Do I need to use create()
anyway, or maybe there's even better way to handle model dependencies?
Upvotes: 3
Views: 882
Reputation: 40909
You can just do
$girl = $this->user->newInstance($attributes); //this doesn't save the model yet
$girl->relation->associate($some_other_model);
$girl->save();
Upvotes: 3