Трудно сказать это, но, в самом хорошем смысле, ваш счетчик не имеет никакого смысла, извините! Я бы порекомендовал полностью избавиться от этого или хотя бы прочитать документацию по PHP на str_pad
.
У вас также есть условное утверждение, которое проверяет "сегодня завтра". Для меня это большой красный флаг, что логика, в общем-то, неверна.
Давайте подумаем над альтернативой. По сути, вы подсчитываете количество записей в день, чтобы использовать его в качестве идентификатора. Я бы предложил подход, подобный этому:
public function setFunctionalIdAttribute()
{
// 1. Count how many records there are from today
// 2. Make an ID that is this number + 1
// 3. If need be, string pad left with 0's
}
1. Посчитайте, сколько записей с сегодняшнего дня
Laravel имеет удобную функцию whereDate
- из документов (поиск whereDate
)
$count = DB::table('users')
->whereDate('created_at', Carbon::today()->toDateString())
->count();
Итак, если бы мы сделали 3 записи сегодня, $count
было бы 3.
2. Сделайте ID, который является этим числом + 1
$count ++;
3. Если нужно, строковую площадку оставьте с нулями
Документы PHP на str_pad довольно ужасны, давайте просто рассмотрим основы:
str_pad($input, $length, $pad_string, $pad_type);
$input
это строка, которую вы дополняете
$length
- конечная длина строки (вот почему ваш цикл for был совершенно не нужен)
$pad_string
если длина строки меньше $length
, заполните оставшееся место этим
$pad_type
, как вы правильно заметили, это необязательный флаг для заполнения слева
Ваш $input
равен $count
, ваш $length
равен 5, судя по вашему примеру, $pad_string
равен "0", и мы сохраняем PAD_LEFT
.
$id = str_pad($count, 5, "0", PAD_LEFT)
Я не могу вспомнить, как установить атрибут с помощью мутатора, поэтому просто скопировав ваш пример (надеюсь, это правильно!), Мы получим:
public function setFunctionalIdAttribute()
{
$count = DB::table('users') // Remember to change this to the correct table name
->whereDate('created_at', Carbon::today()->toDateString())
->count();
$count ++;
$id = str_pad($count, 5, PAD_LEFT)
$this->attributes['functional_id'] = $id;
}
Не забудьте делать это только при создании, так как мы не хотим увеличивать этот идентификатор при каждом сохранении.