我们想用雄辩的ORM和Laravel 5实现复合主键http://www.mbarendezvous.com/ 据我所知,它目前还没有得到雄辩者的支持。请建议最好的替代方案。
您可以重写类上的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
您可以从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;
}
我使用以下代码。它覆盖了原始的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获取原始数据的问题。。