2016-08-04 3 views
1

Это может быть просто для кого-то. Но для меня я полностью потерян. Может кто-нибудь дать мне головы для использования Mysql View в Laravel 5. Я искал соответствующий пост на некоторое время, но не ключ, за исключением:Mysql View in Laravel 5.2

DB::statement("Create View") 

DB::statement("Drop View") 

Но это не звонит колокол. Любая помощь, любая подсказка, любой гид оценены. Спасибо заранее

Моего сценарий

У меня есть сотрудника таблицы с другими таблицами, который содержит различные атрибуты работника отдельно, такие как Appointment, posting, health, family и т.д. и т.п. В большинстве эти таблицы имеют одно свойство Is_current для представления текущей записи сотрудника. Поэтому всякий раз, когда я хочу отображать профиль сотрудника с последней записью или извлекать последнюю запись из некоторых из этих таблиц, я не хочу извлекать из каждой таблицы каждый за другим. Я просто хочу скомпилировать последнюю запись в файле view и извлечь ее, когда захочу.

Я надеюсь, вы понимаете, мои требования и извините за мой плохой английский

+0

Что именно вы хотите достичь? – jaysingkar

+0

Я обновлю свой вопрос с этой информацией, тогда – jonju

ответ

1

Для достижения этой цели есть хорошая статья here
Я покажу некоторый код из статьи.
Alter базовый класс, как следующее:

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

Создать модель сотрудника следующим образом:

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

    protected $fillable = ['name']; 

    protected $guarded = ['id']; 

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

Создать EagerEmployee класс следующим образом:

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

    protected $readOnly = ['person_ids']; 

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


Этот класс будет прочитайте его данные с точки зрения, и мы можем сохранить и retri канун это как обычно. Он будет извлекать атрибуты только для чтения, и при сохранении они будут обработаны надлежащим образом.

Этот новый метод intArrayAttribute() просто преобразует строку идентификатора с разделителями-запятыми, возвращаемую из представления, в массив целых чисел.

Мы можем использовать Employee внутренне, но если нам нужны эти дополнительные атрибуты только для чтения, скажем в ответе api, мы можем использовать класс EagerEmployee. P.S. Вышеприведенный код копируется из данной статьи и изменяется в соответствии с вашими потребностями.

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

enter image description here Добавить код в "конфигурации/database.php" смотри рисунок ниже Show Example