Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Laravel, creare relazione figlia con Eloquent

    Ciao ragazzi, sono nuovo con Laravel, ho 2 model definiti così:

    codice:
    class Contenuti extends Eloquent {    public function dettaglio()
        {
            return $this->hasOne('ContenutiDettaglio', 'contenuto_id');
        }
    }
    
    
    class ContenutiDettaglio extends Eloquent {
        public function contenuto()
        {
            return $this->belongsTo('Contenuti', 'contenuto_id', 'id');
        }
    }
    Sto cercando di estendere il metodo findOrNew di Contenuti per creare sempre anche un dettaglio per ognuno di essi in questo modo:

    codice:
     public static function findOrNew($id, $coloumns = array())    {
            $obj = parent::findOrNew($id);
    
    
            if(!isset($obj->dettaglio()->id))
            {
              $obj->save();
    
    
              $dettaglio = ContenutiDettaglio::create(array('titolo' => 'Nuovo contenuto'));
              $dettaglio->contenuto()->associate($obj);
    
    
              $obj = Contenuti::findOrFail($obj->id);
    
    
              dd($obj->dettaglio());
            }
    
    
            return $obj;
        }
    il problema è che quanto dumpo con dd() il contenuto di dettaglio() quest'ultimo è vuoto mentre invece mi aspetterei di trovare il titolo valorizzato come "Nuovo contenuto".

    Dove sbaglio??
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

  2. #2
    Ho risolto in maniera un po' barbara in questo modo:

    codice:
        public static function findOrNew($id, $coloumns = array())    {
            $obj = parent::findOrNew($id);
    
    
            if($obj->id == NULL)
            {
                $obj->save();
    
    
                $dettaglio = new ContenutiDettaglio(array('titolo' => 'Nuovo contenuto', 'contenuto_id' => $obj->id));
                $dettaglio->save();
    
    
                unset($obj);
    
    
                $obj = self::find($dettaglio->contenuto_id);
            }
    
    
            return $obj;
        }
    « Se nella prima mezz'ora non capisci chi è il pollo, allora il pollo sei tu. » [Thomas "Amarillo Slim" Preston, campione del mondo di poker]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.