2016-04-03 21 views
2

Kompozit birincil anahtarlarımız var, bu nedenle Laravel'in save() yöntemi çalışmadı. Bu nedenle kaydetme yöntemini geçersiz kılmam gerekiyor. Örneğin, birincil anahtarım, column_a ve column_b'den oluşan bir bileşik anahtardır. Bana, kaydetme yöntemini nasıl geçersiz kılacağımı ve nereye koyacağımı örnek verebilir misiniz?Laravel 5 El ile Kaydetme Yöntemini Geçersiz Kılma Yöntem

Benim Birincil Anahtar: column_a, column_b

Ben şunları denedim:

protected function setKeysForSaveQuery(Builder $query) 
{ 
    parent::setKeysForSaveQuery($query); 
    $query->where('locale', '=', $this->locale); 
    return $query; 
} 

kod yukarıda buldum ama 500 iç sunucu hatası bile sadece değerini okuyan bir yöntemi çağırmak neden olur veritabanından. Ben column_b için $ primaryKey = 'column_a' ve 'locale' (içinde nerede) belirledim. Bu $> yerel ayarın ne anlama geldiğini bilmiyordum? İşte

buldum başka bir yoludur, ancak çok

protected $secondaryKey = 'column_b'; 
function newQuery() 
{ 
    $query = parent::newQuery(); 
    $query->where($this->secondaryKey, '=', $this->type); 
    return $query; 
} 

Yine, $ this-> tip atıfta bilmiyordum başarısız oldu.

cevap

2

Bunu geçersiz kılabilirsiniz. Bunu modelinize koyabilirsiniz ya da bunu bir özellik haline getirebilir ve isterseniz bu trati birden çok modelde kullanabilirsiniz.

Orijinal save() yöntemi here (satır 1449) şeklindedir, belki bu yardımcı olacaktır.

+0

bana örnek verebilir? Ben tam olarak ne demek istedim anlamadı, ben tam olarak ne demek istedim anlamadı, ancak yan tümce tümce (diğer sütunlar) sorgu ( – OrgGila

+0

) eklemek ve nasıl yeni bir soru oluşturmak için tavsiye ederim Orada her şeyi cevaplayın ve açıklayın (kodla, tam olarak ne istiyorsun, neyi denediniz). Eminim ben ya da diğer adamlar size yardımcı olacaktır. –

+0

Sadece denediğimi ekledim. – OrgGila

1

Çözümü buldum. modelde, primaryKey değişken ve aşağıdaki işlevi ekleyin

protected $primaryKey = array('column1','column2'); 

protected function setKeysForSaveQuery(\Illuminate\Database\Eloquent\Builder $query) { 
    if (is_array($this->primaryKey)) { 
     foreach ($this->primaryKey as $pk) { 
      $query->where($pk, '=', $this->original[$pk]); 
     } 
     return $query; 
    }else{ 
     return parent::setKeysForSaveQuery($query); 
    } 
} 

Kaynak: https://github.com/laravel/framework/issues/5517#issuecomment-113655441

İlgili konular