はじめに
実験した環境は:* Laravel 5.4 * php7.0 よく、「複合キーはサポートされていない、サロゲートキーを使用してくれ」という記事を見かけるので、複合キーを扱えるようにする方法を簡単に書く。
トレイトの作成
下記のトレイトを適当な場所に、CompositePrimaryKeyTrait.php
という名前で作成する。
<?php
namespace App;
use \Illuminate\Database\Eloquent\Builder;
trait CompositePrimaryKeyTrait
{
/**
* 複合キーに対応させるために使用する。
* Set the keys for a save update query.
*
* @param Builder $query
* @return Builder
*/
protected function setKeysForSaveQuery(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);
}
}
}
モデルでの扱い
適当なモデルに、use CompositePrimaryKeyTrait;
を追加するだけです。
namespace App;
use Illuminate\Database\Eloquent\Model;
class TestModel extends Model
{
use CompositePrimaryKeyTrait;
/**
* 複合キー
* @var array
*/
protected $primaryKey = ['id', 'name'];
...
}
さいごに
これでErrorException in Model.php line XXXX: Illegal offset type in isset or empty
上記のような例外がでなくなるはずです。
ictluehara
情報ありがとうございました!!
助かりました。