add composite key trait
This commit is contained in:
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Traits;
|
||||||
|
|
||||||
|
trait HasCompositePrimaryKey
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the value indicating whether the IDs are incrementing.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getIncrementing()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the keys for a save update query.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||||
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
protected function setKeysForSaveQuery($query)
|
||||||
|
{
|
||||||
|
foreach ($this->getKeyName() as $key) {
|
||||||
|
// UPDATE: Added isset() per devflow's comment.
|
||||||
|
if (isset($this->$key))
|
||||||
|
$query->where($key, '=', $this->$key);
|
||||||
|
else
|
||||||
|
throw new \Exception(__METHOD__ . 'Missing part of the primary key: ' . $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
// UPDATE: From jessedp. See his edit, below.
|
||||||
|
/**
|
||||||
|
* Execute a query for a single record by ID.
|
||||||
|
*
|
||||||
|
* @param array $ids Array of keys, like [column => value].
|
||||||
|
* @param array $columns
|
||||||
|
* @return mixed|static
|
||||||
|
*/
|
||||||
|
public static function find($ids, $columns = ['*'])
|
||||||
|
{
|
||||||
|
$me = new self;
|
||||||
|
$query = $me->newQuery();
|
||||||
|
foreach ($me->getKeyName() as $key) {
|
||||||
|
$query->where($key, '=', $ids[$key]);
|
||||||
|
}
|
||||||
|
return $query->first($columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user