56 lines
1.3 KiB
PHP
56 lines
1.3 KiB
PHP
<?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);
|
|
}
|
|
}
|