2014-06-14 31 views
5

Ben web sitesinde inşa ediyorum bir oyun için veritabanına bir nesne kurtarmaya çalışıyorum oluştururken laravel boş değerden varsayılan nesne oluşturma, ama bu hatayı almaya devam:bir Eloquent nesneyi

Creating default object from empty value 

foreach($input['items'] as $key=>$itemText){ 
     $item = ($input['itemIDs'][$key] === 'NA') ? new GameItem() : GameItem::find($input['itemIDs'][$key]); 
     // if updating this item, check that it is assigned to this game 
     if(!is_null($item->game_id) && $item->game_id != $game->id){ continue; } 
     $item->game_id = $game->id; 
     $item->item = $itemText; 
     $item->answer = $input['answers'][$key]; 
     $item->save(); 
    } 

hata varsa deyimi gerçekleşir:

İşte kullanıyorum kodu. Bunu yorumlamaya çalıştım ve sonra hata $ item-> game_id = $ game-> id; hat.

Hem $ item hem de $ game var_dumped ve ikisi de geçerli Eloquent nesneleridir. Hatta if ifadesinin sonucunu problemsiz olarak çözdüm, bu yüzden neler olup bittiğine dair bir kayıp yapıyorum.

Sadece

var_dump($item->toArray()); die(); 

sağ $ item- önce>) (tasarruf yaparsanız fark

; satır, herhangi bir hata atmaz ve bana diziyi gösterir.

Bu durumda sorun ne olabilir? Sanırım eşyayı kaydetmekle ilgisi var, ama hiç anlamıyorum.

cevap

5

aşağıdaki satırı: Eğer bu hata görünür bir propertyNULL üzerinde değer kullanmaya çalıştığınızda

$item = ($input['itemIDs'][$key] === 'NA') ? new GameItem() : GameItem::find($input['itemIDs'][$key]); 

Her zaman çok bir GameItem nesneyi döndürmez. (Eğer $item->game_id kullanmadan önce $itemNULL olmadığından emin olun İlk başta) Bunun yerine

if(!is_null($item) && $item->game_id != $game->id) { continue; } 

: $item böyle değil NULL kullanarak bir şey ise Böylece her zaman kontrol etmelidir

if(!is_null($item->game_id) && $item->game_id != $game->id){ continue; } 
+3

teşekkür ederiz. Sadece sorunumu çözdüm ve bu aslında değildi, ama benim yaptığım gibi başka durumlarda bir hataya neden olabilirdi. Ben gerçekten değişti! Boş() ile is_null. – Chris

+0

Hoş geldiniz ve +1, çünkü onu sildiniz ancak eylemi geri aldınız :-) –