← Предыдущая · Назад к README · Следующая →
Eloquent
При сохранении модели Str::slug(title) автоматически записывается в slug через SlugCast. Используется итоговое значение title после пользовательских сеттеров названия. Поддерживаются пользовательские мутаторы названия и saveQuietly(). Изменение названия меняет slug. Например, Products превращается в products. Массовые обновления и вставки через Query Builder обходят сохранение модели; используйте методы модели create(), update() или save().
Для выбора отдельных фидов и запуска по расписанию задавайте названия с различными непустыми slug. Фид с названием, которое даёт пустой slug, нельзя выбрать. Если slug совпадает у нескольких неудалённых записей, поиск выбрасывает Illuminate\Database\MultipleRecordsFoundException; суффиксы автоматически не добавляются.
Пользовательская модель регистрации фида
Задайте для feeds.model модель приложения, если записям регистрации фидов нужны дополнительные столбцы, преобразования, связи или методы. Пользовательская модель должна расширять DragonCode\LaravelFeed\Models\Feed.
namespace App\Models;
use DragonCode\LaravelFeed\Models\Feed as BaseFeed;
class Feed extends BaseFeed
{
protected $fillable = [
'class',
'title',
'expression',
'is_active',
'last_activity',
'is_foo',
'is_bar',
];
protected function casts(): array
{
return [
...parent::casts(),
'is_foo' => 'boolean',
'is_bar' => 'boolean',
];
}
}
Зарегистрируйте модель в config/feeds.php:
'model' => App\Models\Feed::class,
Добавьте пользовательские столбцы в таблицу фидов через миграцию приложения. Оставьте в $fillable каждый атрибут, разрешённый для массового присваивания.
FeedQuery использует настроенную модель для создания, поиска, получения списка, обновления, удаления и восстановления. При создании записи передавайте специфичные для приложения значения через extra. Они применяются последними и могут переопределить аргументы метода:
$feed = app(FeedQuery::class)->create(
class: SomeFeed::class,
title: 'Some',
expression: '0 */12 * * *',
extra: [
'is_foo' => true,
'is_bar' => true,
]
);
Модель приложения также может использовать обычный API Eloquent:
use App\Models\Feed;
$feed = Feed::create([
'class' => SomeFeed::class,
'title' => 'Some',
'expression' => '0 */12 * * *',
'is_active' => true,
'is_foo' => true,
'is_bar' => true,
]);
Настроенная модель определяется во время выполнения. Статический анализ считает результат FeedQuery::create() базовой моделью пакета. Если для специфичных свойств приложения нужно автодополнение, используйте App\Models\Feed::create() или явный локальный тип.
Размер блока
Запросы к базе данных используют блоки, которые по умолчанию содержат 1000 элементов. Размер можно изменить, переопределив метод chunkSize:
use DragonCode\LaravelFeed\Feeds\Feed;
class UserFeed extends Feed
{
public function chunkSize(): int
{
return 500;
}
}