Something went wrong. Try again.
Store your seeds
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105<?php
declare(strict_types=1);
namespace App\Models;
use App\Enums\SeedSpecies;use Database\Factories\SeedFactory;use Illuminate\Database\Eloquent\Casts\ArrayObject;use Illuminate\Database\Eloquent\Casts\AsArrayObject;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Relations\BelongsTo;use Illuminate\Database\Eloquent\Relations\HasMany;use Illuminate\Support\Carbon;use Illuminate\Support\Collection;
/** * @property int $id * @property int $user_id * @property string $name * @property string|null $essence * @property SeedSpecies $species * @property ArrayObject<array-key, mixed> $sprouts * @property string|null $attachment_image_path * @property Carbon|null $created_at * @property Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection<int, Effort> $efforts * @property-read int|null $efforts_count * @property-read User $user * * @method static \Database\Factories\SeedFactory factory($count = null, $state = []) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed newQuery() * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed query() * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereAttachmentImagePath($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereEssence($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereId($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereName($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereSpecies($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereSprouts($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder<static>|Seed whereUserId($value) * * @mixin \Eloquent */class Seed extends Model{ /** @use HasFactory<SeedFactory> */ use HasFactory;
protected function casts(): array { return [ 'sprouts' => AsArrayObject::class, 'species' => SeedSpecies::class, ]; }
protected $attributes = [ 'species' => SeedSpecies::WILD->value, ];
/** * @return BelongsTo<User, $this> */ public function user(): BelongsTo { return $this->belongsTo(User::class); }
/** * @return HasMany<Effort, $this> */ public function efforts(): HasMany { return $this->hasMany(Effort::class); }
public static function getSpeciesWithCounts(User $user): Collection {
/** * This doesn't include species that don't * have any seeds associated with them. */ $speciesWithCounts = $user->seeds() ->selectRaw('species, count(*) as count') ->groupBy('species') ->pluck('count', 'species');
/** * Use a default value of 0 if $species * isn't present in $speciesWithCounts * And append an 'all' key with the total * number of seeds for $user to the collection. */ return collect(SeedSpecies::cases()) ->mapWithKeys(fn ($species) => [ $species->value => $speciesWithCounts->get($species->value, 0), ])->put('all', $user->seeds()->count()); }}