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;
use App\Models\Tag;
use CloudCreativity\LaravelJsonApi\Eloquent\AbstractAdapter;
use CloudCreativity\LaravelJsonApi\Pagination\StandardStrategy;
use Illuminate\Support\Collection;
use Spatie\Tags\Tag;
class TagAdapter extends AbstractAdapter
{

View File

@ -5,12 +5,12 @@ namespace App\Models;
use App\Models\Traits\Ingredient;
use App\Models\Traits\Journalable;
use App\Models\Traits\Sluggable;
use App\Models\Traits\Taggable;
use App\Support\Number;
use ElasticScoutDriverPlus\QueryDsl;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
use Spatie\Tags\HasTags;
/**
* App\Models\Food
@ -77,12 +77,12 @@ use Spatie\Tags\HasTags;
final class Food extends Model
{
use HasFactory;
use HasTags;
use Ingredient;
use Journalable;
use QueryDsl;
use Searchable;
use Sluggable;
use Taggable;
/**
* @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).
*/

View File

@ -6,6 +6,7 @@ use App\Models\Traits\HasIngredients;
use App\Models\Traits\Ingredient;
use App\Models\Traits\Journalable;
use App\Models\Traits\Sluggable;
use App\Models\Traits\Taggable;
use ElasticScoutDriverPlus\QueryDsl;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
@ -16,7 +17,6 @@ use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Tags\HasTags;
/**
* App\Models\Recipe
@ -80,13 +80,13 @@ final class Recipe extends Model implements HasMedia
{
use HasFactory;
use HasIngredients;
use HasTags;
use Ingredient;
use InteractsWithMedia;
use Journalable;
use QueryDsl;
use Searchable;
use Sluggable;
use Taggable;
/**
* @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,
'recipes' => \App\Models\Recipe::class,
'recipe-steps' => \App\Models\RecipeStep::class,
'tags' => \Spatie\Tags\Tag::class,
'tags' => \App\Models\Tag::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,
];
}
}