我有这个表:
--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')
));
注意:如果有人知道该怎么做,也许他可以告诉我删除的方式。例如,有人点击两次。该记录应创建为已删除。
答案 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);
在上面的示例中,我将搜索在我的表中是否有匹配name
和email
的条目,如果它存在,我将更新记录,否则我将插入一个新条目$values
infos