2016-04-03 5 views
2

У меня есть составные первичные ключи, поэтому метод save() Laravel не работает. Поэтому мне нужно переопределить метод сохранения. Например, мой первичный ключ представляет собой составной ключ, состоящий из столбцов_a и column_b. Можете ли вы привести пример, как переопределить метод сохранения и где я его разместил?Laravel 5 Override Eloquent Save Method

Мой Первичный ключ: column_a, column_b

Я попробовал следующее:

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

я нашел выше кода, но это приводит к 500 Внутренняя ошибка сервера даже я называю метод, который только считывает значение из базы данных. Я установил $ primaryKey = 'column_a' и 'locale' (внутри где) для столбца_b. Я не знал, к чему относится этот $ this-> locale?

Вот еще один способ я нашел, но он не слишком

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

Опять же, я не знаю, что $ this-> тип относится.

ответ

2

Вы можете переопределить его. Вы можете поместить его в свою модель, или вы можете поместить его в черту и использовать этот trate в нескольких моделях, если хотите.

Оригинальный способ сохранения() - here (строка 1449), может быть, это поможет.

+0

вы можете дать мне пример? Я не знаю, как удалить id из where where и добавить несколько предложений where (другие столбцы) в запрос – OrgGila

+0

Я не понял, что именно вы имеете в виду, но поскольку это новый вопрос, я бы рекомендовал вам создать новый ответить и описать все там (с кодом, что именно вы хотите, что вы уже пробовали). Я уверен, что мне или другим парням помогут. –

+0

Я только что включил то, что я пробовал. – OrgGila

1

Я нашел решение. В модели, добавьте PrimaryKey переменную и следующую функцию

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

Источник: https://github.com/laravel/framework/issues/5517#issuecomment-113655441

Смежные вопросы