Hva er forkortelsen for å sette inn en ny post eller oppdatere hvis den ikke finnes?
<?php
$shopOwner = ShopMeta::where('shopId', '=', $theID)
->where('metadataKey', '=', 2001)->first();
if ($shopOwner == null) {
// Insert new record into database
} else {
// Update the existing record
}
Her er et fullstendig eksempel på hva "lu cip" snakket om:
$user = User::firstOrNew(array('name' => Input::get('name')));
$user->foo = Input::get('foo');
$user->save();
Nedenfor er den oppdaterte lenken til dokumentene som er på den nyeste versjonen av Laravel
Dokumenter her: Oppdatert lenke
updateOrCreate
Innebygd i kjernen...]Bare i tilfelle folk fortsatt kommer over dette ... Jeg fant ut noen uker etter å ha skrevet dette, at dette faktisk er en del av Laravel' s Eloquent' s kjerne ...
Graver inn i Eloquents tilsvarende metode(r). Du kan se her:
https://github.com/laravel/framework/blob/4.2/src/Illuminate/Database/Eloquent/Model.php#L553
på :570 og :553
/**
* Create or update a record matching the attributes, and fill it with values.
*
* @param array $attributes
* @param array $values
* @return static
*/
public static function updateOrCreate(array $attributes, array $values = array())
{
$instance = static::firstOrNew($attributes);
$instance->fill($values)->save();
return $instance;
}
Gammelt svar nedenfor
Jeg lurer på om det er noen innebygd L4-funksjonalitet for å gjøre dette på en eller annen måte, for eksempel:
$row = DB::table('table')->where('id', '=', $id)->first();
// Fancy field => data assignments here
$row->save();
Jeg opprettet denne metoden for noen uker tilbake ...
// Within a Model extends Eloquent
public static function createOrUpdate($formatted_array) {
$row = Model::find($formatted_array['id']);
if ($row === null) {
Model::create($formatted_array);
Session::flash('footer_message', "CREATED");
} else {
$row->update($formatted_array);
Session::flash('footer_message', "EXISITING");
}
$affected_row = Model::find($formatted_array['id']);
return $affected_row;
}
Jeg håper det hjelper. Jeg vil gjerne se et alternativ til dette hvis noen har et å dele. @erikthedev_
Lagre funksjon:
$shopOwner->save()
gjør allerede det du vil...
Laravel-kode:
// If the model already exists in the database we can just update our record
// that is already in this database using the current IDs in this "where"
// clause to only update this model. Otherwise, we'll just insert them.
if ($this->exists)
{
$saved = $this->performUpdate($query);
}
// If the model is brand new, we'll insert it into our database and set the
// ID attribute on the model to the value of the newly inserted row's ID
// which is typically an auto-increment value managed by the database.
else
{
$saved = $this->performInsert($query);
}