Перейти к основному содержимому
Версия: 1.x

← Предыдущая · Назад к 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;
}
}

Смотрите также​