Override Tag class in app models

This commit is contained in:
Christopher C. Wells 2021-03-31 20:12:26 -07:00
parent 49f8536831
commit 9413fa7686
7 changed files with 106 additions and 6 deletions

View File

@ -2,10 +2,10 @@
namespace App\JsonApi\Adapters; namespace App\JsonApi\Adapters;
use App\Models\Tag;
use CloudCreativity\LaravelJsonApi\Eloquent\AbstractAdapter; use CloudCreativity\LaravelJsonApi\Eloquent\AbstractAdapter;
use CloudCreativity\LaravelJsonApi\Pagination\StandardStrategy; use CloudCreativity\LaravelJsonApi\Pagination\StandardStrategy;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Spatie\Tags\Tag;
class TagAdapter extends AbstractAdapter class TagAdapter extends AbstractAdapter
{ {

View File

@ -5,12 +5,12 @@ namespace App\Models;
use App\Models\Traits\Ingredient; use App\Models\Traits\Ingredient;
use App\Models\Traits\Journalable; use App\Models\Traits\Journalable;
use App\Models\Traits\Sluggable; use App\Models\Traits\Sluggable;
use App\Models\Traits\Taggable;
use App\Support\Number; use App\Support\Number;
use ElasticScoutDriverPlus\QueryDsl; use ElasticScoutDriverPlus\QueryDsl;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable; use Laravel\Scout\Searchable;
use Spatie\Tags\HasTags;
/** /**
* App\Models\Food * App\Models\Food
@ -77,12 +77,12 @@ use Spatie\Tags\HasTags;
final class Food extends Model final class Food extends Model
{ {
use HasFactory; use HasFactory;
use HasTags;
use Ingredient; use Ingredient;
use Journalable; use Journalable;
use QueryDsl; use QueryDsl;
use Searchable; use Searchable;
use Sluggable; use Sluggable;
use Taggable;
/** /**
* @inheritdoc * @inheritdoc
@ -154,6 +154,14 @@ final class Food extends Model
]; ];
} }
/**
* @inheritdoc
*/
public static function getTagClassName(): string
{
return Tag::class;
}
/** /**
* Get the serving size as a formatted string (e.g. 0.5 = 1/2). * Get the serving size as a formatted string (e.g. 0.5 = 1/2).
*/ */

View File

@ -6,6 +6,7 @@ use App\Models\Traits\HasIngredients;
use App\Models\Traits\Ingredient; use App\Models\Traits\Ingredient;
use App\Models\Traits\Journalable; use App\Models\Traits\Journalable;
use App\Models\Traits\Sluggable; use App\Models\Traits\Sluggable;
use App\Models\Traits\Taggable;
use ElasticScoutDriverPlus\QueryDsl; use ElasticScoutDriverPlus\QueryDsl;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@ -16,7 +17,6 @@ use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Tags\HasTags;
/** /**
* App\Models\Recipe * App\Models\Recipe
@ -80,13 +80,13 @@ final class Recipe extends Model implements HasMedia
{ {
use HasFactory; use HasFactory;
use HasIngredients; use HasIngredients;
use HasTags;
use Ingredient; use Ingredient;
use InteractsWithMedia; use InteractsWithMedia;
use Journalable; use Journalable;
use QueryDsl; use QueryDsl;
use Searchable; use Searchable;
use Sluggable; use Sluggable;
use Taggable;
/** /**
* @inheritdoc * @inheritdoc

38
app/Models/Tag.php Normal file
View File

@ -0,0 +1,38 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Spatie\Tags\Tag as TagBase;
/**
* App\Models\Tag
*
* @property int $id
* @property array $name
* @property array $slug
* @property string|null $type
* @property int|null $order_column
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read array $translations
* @method static Builder|Tag containing(string $name, $locale = null)
* @method static \Database\Factories\TagFactory factory(...$parameters)
* @method static \Illuminate\Database\Eloquent\Builder|Tag newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Tag newQuery()
* @method static Builder|Tag ordered(string $direction = 'asc')
* @method static \Illuminate\Database\Eloquent\Builder|Tag query()
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereOrderColumn($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereSlug($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereUpdatedAt($value)
* @method static Builder|Tag withType(?string $type = null)
* @mixin \Eloquent
*/
final class Tag extends TagBase
{
use HasFactory;
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Models\Traits;
use App\Models\Tag;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Spatie\Tags\HasTags;
trait Taggable
{
use HasTags;
/**
* Use local app Tag class.
*/
public static function getTagClassName(): string
{
return Tag::class;
}
/**
* Tell `tags` method to use app Tag class.
*/
public function tags(): MorphToMany
{
return $this
->morphToMany(self::getTagClassName(), 'taggable', 'taggables', null, 'tag_id')
->orderBy('order_column');
}
}

View File

@ -72,7 +72,7 @@ return [
'journal-entries' => \App\Models\JournalEntry::class, 'journal-entries' => \App\Models\JournalEntry::class,
'recipes' => \App\Models\Recipe::class, 'recipes' => \App\Models\Recipe::class,
'recipe-steps' => \App\Models\RecipeStep::class, 'recipe-steps' => \App\Models\RecipeStep::class,
'tags' => \Spatie\Tags\Tag::class, 'tags' => \App\Models\Tag::class,
'users' => \App\Models\User::class, 'users' => \App\Models\User::class,
], ],

View File

@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Models\Tag;
use Illuminate\Database\Eloquent\Factories\Factory;
class TagFactory extends Factory
{
/**
* {@inheritdoc}
*/
protected $model = Tag::class;
/**
* {@inheritdoc}
*/
public function definition(): array
{
return [
'name' => $this->faker->word,
];
}
}