Created
June 5, 2018 14:49
-
-
Save j0eii/024a5de0cf738cb275ba04757f0a158d to your computer and use it in GitHub Desktop.
Laravel 5.0+ CompositePrimaryKey trait
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Behaviours\Eloquent; | |
use Illuminate\Database\Eloquent\Builder; | |
/** | |
* Composite Primary Key Trait adoption for eloquent object | |
* | |
* Trait HasCompositePrimaryKey | |
* @package App | |
*/ | |
trait HasCompositePrimaryKey | |
{ | |
/** | |
* Also Please override the following trait properties | |
protected $primaryKey = ['composite_key_id', 'another_composit_key_id']; | |
public $incrementing = false; | |
*/ | |
/** | |
* Set the keys for a save update query. | |
* | |
* @param \Illuminate\Database\Eloquent\Builder $query | |
* @return \Illuminate\Database\Eloquent\Builder | |
*/ | |
protected function setKeysForSaveQuery(Builder $query) | |
{ | |
$keys = $this->getKeyName(); | |
if (!is_array($keys)) { | |
return parent::setKeysForSaveQuery($query); | |
} | |
foreach ($keys as $keyName) { | |
$query->where($keyName, '=', $this->getKeyForSaveQuery($keyName)); | |
} | |
return $query; | |
} | |
/** | |
* Get the primary key value for a save query. | |
* | |
* @param mixed $keyName | |
* @return mixed | |
*/ | |
protected function getKeyForSaveQuery($keyName = null) | |
{ | |
if (is_null($keyName)) { | |
$keyName = $this->getKeyName(); | |
} | |
if (isset($this->original[$keyName])) { | |
return $this->original[$keyName]; | |
} | |
return $this->getAttribute($keyName); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment