首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合式主键

组合式主键
EN

Stack Overflow用户
提问于 2017-03-29 07:12:23
回答 4查看 8.5K关注 0票数 1

我们想要为http://www.mbarendezvous.com/实现复合主键和雄辩的ORM和Laravel 5,我知道它目前不被雄辩者所支持。请建议什么是最好的选择相同。

EN

回答 4

Stack Overflow用户

发布于 2017-08-04 11:17:57

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

代码语言:javascript
复制
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;
}

编辑:不要忘记在您的模型类中添加以下内容,否则将无法工作。

代码语言:javascript
复制
public $incrementing = false;
票数 10
EN

Stack Overflow用户

发布于 2017-06-29 09:40:01

您可以从laravel的Model类重写setKeysForSaveQuery方法。可以将此方法更改为:

代码语言:javascript
复制
/**
 * Set the keys for a save update query.
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
protected function setKeysForSaveQuery(Builder $query)
{
    $query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());
    $query->where('secondKeyName', $this->secondKeyName); // <- added line

    return $query;
}
票数 1
EN

Stack Overflow用户

发布于 2017-03-30 13:16:46

您可以重写类的save()方法,该方法扩展了具有复合键的Model,如下所示:

代码语言:javascript
复制
public function save(array $options = array())
{
  $query = $this->newQueryWithoutScopes();
  // MY MODEL SPECIFIC FIX
  $query->where('OTHER_ID', '=', $this->OTHER_ID);
  // END MY FIX

 // the rest of the standard model->save() code is here but I cut it out for brevity. 
 // Use what is in Model.php already. 
}

我在这里看到了这个解决方案:https://github.com/laravel/framework/issues/5517

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43086722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档