<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; use Spatie\Feed\Feedable; use Spatie\Feed\FeedItem; use Spatie\QueryBuilder\QueryBuilder; class Home extends Model implements Feedable { protected $fillable = [ 'title', 'price', 'surface', 'garden_surface', 'rooms', 'energy', 'ges', 'description', 'city', 'pictures', 'map', 'url', 'pictures_downloaded', ]; protected $casts = [ 'map' => 'array', 'pictures' => 'array', ]; public function excerpt() { return Str::words($this->description, 10); } public function scopeComment(QueryBuilder $query, $comment): QueryBuilder { return $query->where('comment', 'LIKE', '%'.$comment.'%'); } public function scopePriceMax(QueryBuilder $query, $price): QueryBuilder { return $query->where('price', '<=', $price); } public function scopePriceMin(QueryBuilder $query, $price): QueryBuilder { return $query->where('price', '>=', $price); } public function scopeSurfaceMax(QueryBuilder $query, $price): QueryBuilder { return $query->where('surface', '<=', $price); } public function scopeSurfaceMin(QueryBuilder $query, $price): QueryBuilder { return $query->where('surface', '>=', $price); } public function scopeGardenSurfaceMax(QueryBuilder $query, $price): QueryBuilder { return $query->where('garden_surface', '<=', $price); } public function scopeGardenSurfaceMin(QueryBuilder $query, $price): QueryBuilder { return $query->where('garden_surface', '>=', $price); } /** * The "booted" method of the model. * * @return void */ protected static function booted() { // Download images on creation static::created(static function ($home) { Artisan::call('app:downloadimage ' . $home->id); }); } /** * @inheritDoc */ public function toFeedItem() { return FeedItem::create() ->id($this->id) ->title($this->title) ->summary($this->excerpt()) ->author('Shikiryu') ->updated($this->created_at) ->link(\route('public.view', ['slug' => $this->slug])) ; } public static function getFeedItems() { return self::where('slug', '!=', null)->limit(20)->get(); } }