我有关于Laravel的这个问题:
我有一个我的模型和我的RestfulAPI控制器。
在store()方法中,我会检查是否有一个元素已经有'myField'字段(myField id与'id'不同)等于我要创建的内容。如果它已经存在,那么我想更新,否则我只想创建(save())..
我是否要使用find()方法?
答案 0 :(得分:0)
根据我的经验,你必须遍历桌子并检查其独特性。 您可以创建辅助函数并使用 array_unique 函数。也许值得检查Validator类如何检查用户条目是否唯一。
答案 1 :(得分:0)
目前我们有firstOrCreate
或firstOrNew
,但我认为它们并不符合您的需求。例如,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]);
}
}