Laravel更新或创建一个Item

时间:2014-02-19 17:16:31

标签: php rest laravel laravel-4

我有关于Laravel的这个问题:

我有一个我的模型和我的RestfulAPI控制器。

在store()方法中,我会检查是否有一个元素已经有'myField'字段(myField id与'id'不同)等于我要创建的内容。如果它已经存在,那么我想更新,否则我只想创建(save())..

我是否要使用find()方法?

2 个答案:

答案 0 :(得分:0)

根据我的经验,你必须遍历桌子并检查其独特性。 您可以创建辅助函数并使用 array_unique 函数。也许值得检查Validator类如何检查用户条目是否唯一。

答案 1 :(得分:0)

目前我们有firstOrCreatefirstOrNew,但我认为它们并不符合您的需求。例如,firstOrCreate将尝试按所有属性定位行,而不仅仅是一些属性,因此在这种情况下更新是没有意义的。所以我认为你真的必须找到它,但你可以创建一个BaseModel并创建一个如下所示的createOrUpdate方法:

这是未经测试的代码

class BaseModel extends Eloquent {

    public function createOrUpdate($attributes, $keysToCheck = null)
    {
        // If no attributes are passed, find using all
        $keysToCheck = $keysToCheck ?: $attributes;

        if ($model = static::firstByAttributes(array_only($keysToCheck, $attributes))
        {
            $model->attributes = $attributes;
            $model->save();
        }
        else
        {
            $model = static::create($attributes);
        }

        return $model;
    }

}

这是它的实现:

class Post extends BaseModel {

    public function store()
    {
        $model = $this->createOrUpdate(Input::all(), ['full_name']);

        return View::make('post.created', ['model' => $model]);
    }

}