lundi 26 octobre 2015

How can I insert related models in Eloquent without querying the relation first?

I have a User model, which has a one-to-many relationship with UserEvents. So, each User can have many UserEvents.

When I create a new User, I need to also create a new "sign up" event for them, which would be an instance of UserEvent. I would like to be able to create this event through a method on my User object, and for this event to be automatically saved and associated when I call save on the new User object.

somewhere in my controller:

// Creates the new User
$user = new User();           
// Creates a new sign-up event for the User
$user->newEventSignUp();   
// Saves the new user, associating and saving the sign-up event at the same time
$user->save();           

According to this question, I could implement my newEventSignUp like so:

public function newEventSignUp(){        
    $event = new UserEvent([
        "event_type"  => "sign_up",
        "description" => $description
    ]);

    $this->events->add($event);
    return $event;
}

And then call push rather than save on $user to push the newly associated events. However, I am told that the call to $this->events in newEventSignUp will trigger an additional query, impacting performance.

My other idea is to simply store all new UserEvent objects created by my newEvent* methods in an array in User, and then overload User::save() to associate and save the newly added events in my array. However, that doesn't quite feel correct either.

Which approach should I use?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire