2016-08-04 1 views
1

Ceci pourrait être une méthode simple pour quelqu'un. Mais pour moi je suis totalement perdu. Quelqu'un peut-il me donner une tête pour utiliser Mysql Voir en Laravel 5. J'ai cherché poste en question pendant un certain temps, mais pas la moindre idée, sauf:Mysql Voir à Laravel 5.2

DB::statement("Create View") 

DB::statement("Drop View") 

Mais cela ne sonne pas une cloche. Toute aide, toute idée, tout guide est apprécié. Merci à l'avance

Mon scénario

J'ai une table d'employés avec d'autres tableaux qui détient divers attributs de l'employé séparément, comme Appointment, posting, health, family etc etc. La plupart des ces tables ont une propriété Is_current pour représenter l'enregistrement en cours de l'employé. Donc, chaque fois que je veux afficher le profil de l'employé avec le dernier enregistrement ou récupérer le dernier enregistrement de certaines de ces tables, je ne veux pas récupérer de chaque table une par une. Je veux juste compiler le dernier enregistrement dans un view et récupérer de celui-ci quand je veux.

J'espère que vous comprenez mes exigences et désolé pour mon mauvais anglais

+0

Qu'est-ce que vous voulez atteindre exactement? – jaysingkar

+0

Je vais mettre à jour ma question avec cette information puis – jonju

Répondre

1

Pour y parvenir, il y a un bon article here
Je montrerai un code de l'article.
Alter une classe de base comme suit:

public function save(array $options = []) 
{ 
    $this->toWriteMode(); 

    try { 
     $saved = parent::save($options); 
    } catch (\Exception $e) { 
     $this->toReadMode(); 
     throw $e; 
    } 

    $this->toReadMode(); 

    return $saved; 
} 


protected $readOnly = []; 

    protected $readOnlyCache = []; 

    public function save(array $options = []) 
    { 
     $this->toWriteMode(); 
     $this->cacheReadOnly(); 

     try { 
      $saved = parent::save($options); 
     } catch (\Exception $e) { 
      $this->toReadMode(); 
      throw $e; 
     } 

     $this->toReadMode(); 
     $this->restoreReadOnly(); 

     return $saved; 
    } 

    protected function cacheReadOnly() 
    { 
     $this->readOnlyCache = []; 

     foreach ($this->readOnly as $key) { 
      $value = $this->getAttributeValue($key); 
      $this->readOnlyCache[$key] = $value; 
      $this->__unset($key); 
     } 
    } 

    protected function restoreReadOnly() 
    { 
     foreach ($this->readOnlyCache as $key => $value) { 
      $this->setAttribute($key, $value); 
     } 
    } 

Créer un modèle employé comme suit:

class Employee extends BaseModel 
{ 
    protected $table = 'employees'; 

    protected $fillable = ['name']; 

    protected $guarded = ['id']; 

    public function people() 
    { 
     return $this->hasMany('Person'); 
    } 
} 

Créer EagerEmployee classe comme suit:

class EagerEmployee extends Employee 
{ 
    protected $readFrom = 'employeeView'; //Use your view name 

    protected $readOnly = ['person_ids']; 

    public function getPersonIdsAttribute($ids) 
    { 
     return $this->intArrayAttribute($ids); 
    } 
} 


Cette classe lire ses données de la vue et nous pouvons enregistrer et retri veillez comme d'habitude. Il récupérera les attributs en lecture seule et les traitera correctement lors de la sauvegarde.

Cette nouvelle méthode intArrayAttribute() convertit simplement la chaîne d'ID délimitée par des virgules retournée par la vue en un tableau d'entiers.

Nous pouvons utiliser l'employé en interne, mais si nous avons besoin de ces attributs supplémentaires en lecture seule, disons dans une réponse API, nous pouvons utiliser la classe EagerEmployee. P.S. Le code ci-dessus est copié à partir de l'article donné et modifié en fonction de vos besoins.

-1
'options' => [ 
      \PDO::ATTR_EMULATE_PREPARES => true 
] 

enter image description here Ajouter un code à "config/database.php" voir image ci-dessous Show Example