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 中是否有匹配 name
和 email
的条目,如果存在,我将更新记录,否则我将使用 $values
信息
插入一个新条目
我有这个 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 中是否有匹配 name
和 email
的条目,如果存在,我将更新记录,否则我将使用 $values
信息