具有Eloquent的复合主键

Ans*_*hul 1 eloquent

我们希望使用Eloquent ORM和Laravel 5为http://www.mbarendezvous.com/实现Composite主键.我知道Eloquent 目前不支持它.请建议什么应该是相同的最佳选择.

Pet*_*sko 7

我使用以下代码.它会覆盖原始的Model.php方法并考虑所有主键.将其放入使用复合主键的模型中:

protected function getKeyForSaveQuery()
{

    $primaryKeyForSaveQuery = array(count($this->primaryKey));

    foreach ($this->primaryKey as $i => $pKey) {
        $primaryKeyForSaveQuery[$i] = isset($this->original[$this->getKeyName()[$i]])
            ? $this->original[$this->getKeyName()[$i]]
            : $this->getAttribute($this->getKeyName()[$i]);
    }

    return $primaryKeyForSaveQuery;

}

/**
 * Set the keys for a save update query.
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
protected function setKeysForSaveQuery(Builder $query)
{

    foreach ($this->primaryKey as $i => $pKey) {
        $query->where($this->getKeyName()[$i], '=', $this->getKeyForSaveQuery()[$i]);
    }

    return $query;
}
Run Code Online (Sandbox Code Playgroud)

编辑:不要忘记在模型类中添加以下内容,否则这将无法正常工作.

public $incrementing = false;
Run Code Online (Sandbox Code Playgroud)

  • 一旦我在我的模型顶部放入`public $ incrementing = false;`这就行了. (2认同)