2020 Güncellemesi
Olduğu gibi laravel> = 5.3 , birisi kolay bir şekilde bunu nasıl hala merak eğer. Onun kullanarak mümkün: updateOrCreate()
.
Örneğin, sorulan soru için aşağıdaki gibi bir şey kullanabilirsiniz:
$matchThese = ['shopId'=>$theID,'metadataKey'=>2001];
ShopMeta::updateOrCreate($matchThese,['shopOwner'=>'New One']);
Yukarıdaki kod, ShopMeta tarafından temsil edilen shop_metas
ve modelin kendisinde aksi belirtilmedikçe büyük olasılıkla ortaya çıkan tabloyu kontrol edecektir.
ve ile giriş bulmaya çalışacaktır.
kolon shopId = $theID
ve
kolon metadateKey = 2001
ve bulursa shopOwner
bulunan satırın sütununu günceller New One
.
Birden fazla eşleşen satır bulursa, ilk satırı en düşük birincil olanı güncelleyecektir id
.
Hiç bulunmazsa, aşağıdakileri içeren yeni bir satır ekler:
shopId = $theID
, metadateKey = 2001
veshopOwner = New One
Uyarı
Modelinizi kontrol edin $fillable
ve eklemek veya güncellemek istediğiniz her sütun adının tanımlanmış olduğundan emin olun ve sütunları varsayılan değere veya id
sütun otomatik olarak artırılmış bir değere sahip olun .
Aksi takdirde yukarıdaki örnek yürütülürken hata verir:
Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1364 Field '...' doesn't have a default value (SQL: insert into `...` (`...`,.., `updated_at`, `created_at`) values (...,.., xxxx-xx-xx xx:xx:xx, xxxx-xx-xx xx:xx:xx))'
Yeni satır eklenirken değere ihtiyaç duyacağımız ve tanımlanmadığı $fillable
veya varsayılan değere sahip olmadığı için bir alan olacağı için .
Daha fazla referans için lütfen şu adresteki Laravel Belgelerine bakın:
https://laravel.com/docs/5.3/eloquent
Oradan bir örnek:
// If there's a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99]
);
ki bu hemen hemen her şeyi temizler.
Sorgu Oluşturucu Güncellemesi
Birisi Laravel'de Query Builder'ı kullanmanın mümkün olup olmadığını sordu. İşte laravel dokümanlardan Query Builder için referanstır.
Sorgu Oluşturucu Eloquent ile tamamen aynı şekilde çalışır, bu nedenle Eloquent için geçerli olan her şey Sorgu Oluşturucu için de geçerlidir. Bu özel durumda, sorgu oluşturucunuzla aynı işlevi aşağıdaki gibi kullanın:
$matchThese = array('shopId'=>$theID,'metadataKey'=>2001);
DB::table('shop_metas')::updateOrCreate($matchThese,['shopOwner'=>'New One']);
Tabii ki, DB cephesi eklemeyi unutmayın:
use Illuminate\Support\Facades\DB;
VEYA
use DB;
Umut ediyorum bu yardım eder
shopId
birincil anahtarınız değil, değil mi?