我们想要为http://www.mbarendezvous.com/实现复合主键和雄辩的ORM和Laravel 5,我知道它目前不被雄辩者所支持。请建议什么是最好的选择相同。
发布于 2017-08-04 11:17:57
我使用以下代码。它覆盖了原始的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;发布于 2017-06-29 09:40:01
您可以从laravel的Model类重写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;
}发布于 2017-03-30 13:16:46
您可以重写类的save()方法,该方法扩展了具有复合键的Model,如下所示:
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
https://stackoverflow.com/questions/43086722
复制相似问题