Оригинальная ссылка:Learncool.com/la-Ravel/he/3…
Для обсуждения перейдите на профессиональный форум разработчиков Laravel:learnku.com/Laravel
по умолчанию,Laravel Eloquent
Таблица данных модели по умолчанию имеетcreated_at
а такжеupdated_at
два поля. Конечно, мы можем сделать много пользовательских настроек, чтобы реализовать множество интересных функций. Пример приведен ниже.
1. Отключить временные метки
Если в таблице данных нет этих двух полей, при сохранении данныхModel::create($arrayOfValues); --увидимSQL error
.Laravel
в автозаполненииcreated_at / updated_at
, оба поля не найдены.
Чтобы отключить временные метки автозаполнения, простоEloquent Model
Добавьте предыдущее свойство:
class Role extends Model
{
public $timestamps = FALSE;
// ... 其他的属性和方法
}
2. Измените список меток времени по умолчанию.
Если вы в настоящее время используетеLaravel
Что делать, если тип базы данных, т. е. ваш столбец меток времени, назван иначе, чем это? Может быть, они называютсяcreate_timeа такжеupdate_time. Поздравляем, вы также можете определить это в модели:
class Role extends Model
{
const CREATED_AT = 'create_time';
const UPDATED_AT = 'update_time';
3. Измените формат даты/времени метки времени.
Следующее содержание относится к официальному документу веб-сайтаofficial Laravel documentation:
По умолчанию метки времени автоматически форматируются как'Y-m-d H:i:s'
. Если вам нужен собственный формат метки времени, вы можете установить его в своей модели.$dateFormat
Атрибуты. Это свойство определяет формат, в котором дата хранится в базе данных и при сериализации в массив или JSON:
class Flight extends Model
{
/**
* 日期时间的存储格式
*
* @var string
*/
protected $dateFormat = 'U';
}
4. Многие ко многим: промежуточная таблица с меткой времени
Временные метки не заполняются автоматически в ассоциациях «многие ко многим», например в таблице пользователей.usersи лист ролейrolesпромежуточная таблицаrole_user.
В этой модели вы можете определить отношения следующим образом:
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
Затем, когда вы хотите добавить роль пользователю, вы можете использовать ее следующим образом:
$roleID = 1;
$user->roles()->attach($roleID);
По умолчанию эта промежуточная таблицаНе включает метку времени. а такжеLaravel
не будет пытаться автозаполнятьcreated_at/updated_at
Но если вы хотите сохранить метку времени автоматически, вам нужно добавить в файл миграцииcreated_at/updated_at
, а затем добавьте **->withTimestamps();** к ассоциации модели
public function roles()
{
return $this->belongsToMany(Role::class)->withTimestamps();
}
5. Используйтеlatest()
а такжеoldest()
Сортировать по отметке времени
Есть два «ярлыка» для сортировки по отметкам времени.
Вместо:
User::orderBy('created_at', 'desc')->get();
Быстрее сделать так:
User::latest()->get();
По умолчанию,latest() использовать created_atСортировать.
Соответственно, существуетoldest(), будет отсортировано такcreated_at ascending
User::oldest()->get();
Конечно, вы также можете использовать указанные другие поля для сортировки. Например, если вы хотите использоватьupdated_at, ты можешь это сделать:
$lastUpdatedUser = User::latest('updated_at')->first();
6. Не срабатываетupdated_at
Модификации
Всякий раз, при измененииEloquent
записи, будут автоматически поддерживаться с текущей отметкой времениupdated_atполя, что является отличной функцией.
Но иногда вы не хотите этого делать, например: при увеличении значения думайте, что это не «обновление всей строки».
Ну можно сделать как выше - просто отключитьtimestamps
, помните, что это временно:
$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();
7. Обновить только отметку времени и связанную отметку времени
В отличие от предыдущего примера, возможно, вам нужно обновить толькоupdated_atполе без изменения других столбцов.
Поэтому не рекомендуется писать следующее:
$user->update(['updated_at' => now()]);
Вы можете использовать более быстрый метод:
$user->touch();
Другая ситуация, иногда хочется обновить не только текущую модельupdated_at, а также хотите обновить записи родительского отношения.
Например,commentобновляется, то вы хотитеpostстолupdated_at
Также обновлено.
Затем вам нужно определить в вашей модели$touches
Атрибуты:
class Comment extends Model {
protected $touches = ['post'];
public function post()
{
return $this->belongsTo('Post');
}
}
8. Автоматическое преобразование полей меток времениCarbon
Добрый
Последний совет, но скорее напоминание, потому что вы уже должны это знать.
по умолчанию,created_atа такжеupdated_atполя автоматически преобразуются в **$даты**,
поэтому вам не нужно преобразовывать их вCarbon
например, вы можете использоватьCarbon
Методы.
Например:
$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);
Вот и все, быстрый, но, надеюсь, полезный совет!
Оригинальная ссылка:Learncool.com/la-Ravel/he/3…
Для обсуждения перейдите на профессиональный форум разработчиков Laravel:learnku.com/Laravel