当前位置: 首页 > 知识库问答 >
问题:

具有雄辩功能的复合主键

端木狐若
2023-03-14

我们想用雄辩的ORM和Laravel 5实现复合主键http://www.mbarendezvous.com/ 据我所知,它目前还没有得到雄辩者的支持。请建议最好的替代方案。

共有3个答案

易成天
2023-03-14

您可以重写类上的save()方法,该方法扩展具有组合键的模型,如下所示:

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

戚修雅
2023-03-14

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

/**
 * 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;
}
曹建明
2023-03-14

我使用以下代码。它覆盖了原始的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;
}

编辑:不要忘记在模型类中添加以下内容,否则这将不起作用。

public $incrementing = false;
 类似资料:
  • 我最近开始使用Laravel 5作为框架。到目前为止,一切都是完全直截了当的,用它工作很好。然而,目前我遇到了一些关于我雄辩模型的麻烦。 数据库表

  • 我有两个模型。模型有一个(关系)。 关于模型,我有以下关系:

  • 我是新来的拉威尔,我曾在codeigniter工作。我对雄辩的ORM概念着迷。我有一个关于雄辩能力的一般性问题。ORM的功能是什么,我的意思是我们可以获得相关表行的级别。如果你看“http://four.laravel.com/docs/eloquent#relationships 一对一 一对多 多对多 多态关系 在我看来,“一对一”意味着一级。表1表2

  • 我正在用Laravel 5.2开发一个Web应用程序,但有一个问题我无法解决。 我有一个扩展了雄辩模型的模型,但当我试图输出带有“where”的数据库表时,例如 它返回一个包含许多信息的集合,这些信息此时对我来说无用,比如“守卫”、“键入”...我的表的数据在“属性”下。遵循laravel的指南,我看到每个人都像我一样简单地使用它,然后用

  • 我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用

  • 我有一个具有以下列的模型: blog_id(fillabale) 日期(可填充) 柜台 日期blog_id唯一钥匙 每当我试图从这个表中获取结果时,例如, 或 我得到一个错误: 列blog_counter.id不存在 我试图覆盖primaryKey并将其设置为null/['blog\u id',date']/'blog\u id,date',以上任何一项都无法解决试图通过id获取原始数据的问题。。