Laravel - 按定义的属性创建或更新

时间:2015-03-04 14:55:04

标签: mysql laravel-5

我有这个表:

--Votes--
id: Integer
post_id: Integer
user_id: Integer
positive: Boolean

现在我想创建一条记录,只要它不存在。它正在工作,直到有人想点击之后点击不喜欢(另一方面完全相同)。

例如,有人喜欢发布记录,将使用positive=true创建记录。现在,如果用户点击相同的帖子,但这次不喜欢,它将创建另一条记录,但我希望它只更新现有记录。

有一个简单的解决方案吗? 这是我创建记录的代码:

            $vote = Vote::firstOrCreate(array(
                    'post_id' => $request->input('post_id'),
                    'user_id' => Auth::user()->id,
                    'positive' => $request->input('positive')
            ));

注意:如果有人知道该怎么做,也许他可以告诉我删除的方式。例如,有人点击两次。该记录应创建为已删除。

1 个答案:

答案 0 :(得分:0)

您可以使用updateOrCreate方法:

public static function updateOrCreate(array $attributes, array $values = array())
    {
        $instance = static::firstOrNew($attributes);

        $instance->fill($values)->save();

        return $instance;
    }

看看:https://github.com/laravel/framework/blob/5.0/src/Illuminate/Database/Eloquent/Model.php#L605

编辑:
实施例

$attributes = [
    'name' => 'Christian',
    'email' => 'christian@example.com'
];

$values = [
    'name' => 'Christian',
    'email' => 'christian@example.com',
    'phone' => '123456789'
];

MyModel::updateOrCreate($attributes, $values);

在上面的示例中,我将搜索在我的表中是否有匹配nameemail的条目,如果它存在,我将更新记录,否则我将插入一个新条目$values infos