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

Laravel - Create or Update by defined attributes

我有这个 table:

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

现在我只想创建一个不存在的记录。它一直有效,直到有人在点击喜欢后想要点击不喜欢(在另一侧完全相同)。

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

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

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

注意:如果有人知道该怎么做,也许他可以告诉我如何删除。例如有人点击了两次。记录应该被创建和删除。

您可以使用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);

在上面的示例中,我将搜索我的 table 中是否有匹配 nameemail 的条目,如果存在,我将更新记录,否则我将使用 $values 信息

插入一个新条目