如果名称存在,如何使用递增字段创建新的Eloquent模型?

时间:2015-08-19 18:34:00

标签: laravel laravel-5 eloquent

您好我的数据库中有一个计划表,允许用户将他们的计划保存到数据库中,我的问题是由于某种原因用户有两个计划具有相同的名称同一日期。我使用 fullCalendar插件来捕获用户的信息。此外,记录还会被标题开始结束日期删除。

我想知道是否有可能让系统检查特定记录是否存在,并在标题中添加一个数字,如果没有找到记录,那么它只会保存没有数字的标题。< / p>

这可能吗?在雄辩中是否已经有这样的功能?如果是,怎么办呢。

注意:我知道我可以在我的控制器中通过检查存在并在检索到的标题中添加一个数字来执行此操作我的问题是,如果已经有一种方法可以直接从模型执行此操作必须在控制器中编写代码,就像生成 slugs 一样。

1 个答案:

答案 0 :(得分:0)

好吧,因为我无法找到解决方案,我只是写了这个函数:

/**
 * @param $str
 * @param Model $model
 * @param $column
 * @return string
 */
protected function increment_if_exists($str, \Illuminate\Database\Eloquent\Model $model, $column)
{
    // Finding max ID of any occurrence of specified string
    $max = $model::select($column)->whereRaw($column ." REGEXP '" . addSlashes($str) . "'")
                                        ->orWhereRaw($column ." REGEXP '" . addSlashes($str) . " \\\\([0-9]+\\\\)'")
                                            ->max('id');

    // If 0 matches found supplied string is used.
    // If 1 or more matches found 1 is added to the returned value and appended to supplied string in parenthesis.
    $new =  empty($max) ? $str : $str . ' (' . ($max + 1) . ')';
    return $new;
}

我在我的控制器中使用它,所以它并不是我想要的,但也许有人会看到这个并想出一种将它集成到模型中的方法,以便它在保存时自动为你完成。