2016-04-03 11 views
2

Laravelのsave()メソッドが機能しなかったので、私は複合プライマリキーを持っています。したがって、私はsaveメソッドをオーバーライドする必要があります。たとえば、私の主キーは、column_aとcolumn_bからなる複合キーです。 saveメソッドをどのようにオーバーライドするか、どこに置くかの例を教えてください。Laravel 5 Eloquent Saveメソッドをオーバーライド

私の主キー:column_a、COLUMN_B

は、私は以下のことを試してみた:

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

は、私は上記のコード見つけましたが、それは私が唯一の値を読み込むメソッドを呼び出しても、500内部サーバーエラーが発生しますデータベースから。私はcolumn_bに$ primaryKey = 'column_a'と 'locale'を設定しました。 $ this-> localeが何を指しているのか分かりませんでしたか?ここで

は、私が見つけたもう一つの方法ですが、それはあまりにも

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

繰り返しますが、私はます$ this->はタイプが参照するかわからなかったが失敗しました。

答えて

2

これを上書きすることができます。あなたはあなたのモデルにそれを置くことができます、またはあなたが望むなら、それを特性に入れて、このモデルを複数のモデルで使うことができます。

元のsave()メソッドはhere(1449行目)ですが、これが役立つかもしれません。

+0

はあなたが私に例を与えることができますか?私はid句からIDを削除して、where句(他の列)をクエリに追加する方法がわかりません – OrgGila

+0

正確に何を意味するのか分かりませんでしたが、これは新しい質問ですので、答え、そこにあるすべてのことを(コードで、正確に何をしたいのか、すでに試したもので)記述します。私や他の人があなたを助けると確信しています。 –

+0

私が試したことをちょうど入れました。 – OrgGila

1

解決策が見つかりました。モデルでは、主キー変数と、次の機能を追加し

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

関連する問題