2016-08-04 12 views
1

Dies könnte für jemanden einfach sein. Aber für mich bin ich total verloren. Kann mir jemand ein Heads geben für die Verwendung von Mysql View in Laravel 5. Ich für eine Weile nach relevantem Beitrag der Suche habe aber keine Ahnung, außer:Mysql Blick in Laravel 5.2

DB::statement("Create View") 

DB::statement("Drop View") 

Aber dies eine Glocke klingelt nicht. Jede Hilfe, jeder Hinweis, jeder Führer wird geschätzt. Vielen Dank im Voraus

Mein Szenario

Ich habe einen Mitarbeiter Tisch mit anderen Tabellen, die separat verschiedene Attribute des Mitarbeiters hält wie Appointment, posting, health, family etc etc. Die meisten Diese Tabellen haben eine Eigenschaft Is_current, um den aktuellen Datensatz des Mitarbeiters darzustellen. Wenn ich also ein Mitarbeiterprofil mit dem neuesten Datensatz anzeigen oder einen letzten Datensatz aus einigen dieser Tabellen abrufen möchte, möchte ich nicht jeden einzelnen einer nach dem anderen abrufen. Ich möchte nur den neuesten Datensatz in einer view kompilieren und davon abrufen, wann immer ich will.

Ich hoffe, dass Sie meine Anforderungen und leider verstehen für mein schlechtes Englisch

+0

Was genau Sie erreichen wollen? – jaysingkar

+0

Ich werde meine Frage dann mit dieser Information aktualisieren – jonju

Antwort

1

Um dies zu erreichen, gibt es einen guten Artikel here
ich einige Code aus dem Artikel zeigen.
Alter eine Basisklasse wie folgt:

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); 
     } 
    } 

Mitarbeitermodell erstellen wie folgt:

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

    protected $fillable = ['name']; 

    protected $guarded = ['id']; 

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

EagerEmployee Klasse erstellen, wie folgt:

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

    protected $readOnly = ['person_ids']; 

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


Diese Klasse wird Lesen Sie seine Daten aus der Ansicht und wir können speichern und retri Vorab wie immer. Es werden schreibgeschützte Attribute abgerufen, und sie werden beim Speichern entsprechend behandelt.

Diese neue intArrayAttribute() Methode konvertiert nur die durch Komma getrennte ID-Zeichenfolge, die von der Ansicht in ein Array von Ganzzahlen zurückgegeben wird.

Wir können den Mitarbeiter intern verwenden, aber wenn wir diese zusätzlichen schreibgeschützten Attribute benötigen, sagen wir in einer API-Antwort, können wir die EagerEmployee-Klasse verwenden. P.S. Der obige Code wird vom angegebenen Artikel kopiert und entsprechend Ihren Anforderungen geändert.

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

enter image description here Code hinzufügen zu "config/database.php" unten Bild sehen Show Example