MyHomeCollection/app/Home.php

102 lines
2.6 KiB
PHP
Raw Permalink Normal View History

2020-07-23 12:26:10 +02:00
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Route;
2020-07-23 12:26:10 +02:00
use Illuminate\Support\Str;
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;
use Spatie\QueryBuilder\QueryBuilder;
2020-07-23 12:26:10 +02:00
class Home extends Model implements Feedable
2020-07-23 12:26:10 +02:00
{
protected $fillable = [
'title', 'price', 'surface', 'garden_surface', 'rooms', 'energy',
'ges', 'description', 'city', 'pictures', 'map', 'url', 'pictures_downloaded',
2020-07-23 12:26:10 +02:00
];
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.'%')
->orWhere('description', '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);
}
2020-07-24 11:06:49 +02:00
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) {
if (!empty($home->pictures)) {
Artisan::call('app:downloadimage ' . $home->id);
}
});
}
/**
* @inheritDoc
*/
2022-11-30 14:07:02 +01:00
public function toFeedItem(): FeedItem
{
return FeedItem::create()
->id($this->id)
->title($this->title)
->summary($this->excerpt())
2022-11-30 14:07:02 +01:00
->authorName('Shikiryu')
->updated($this->created_at)
->link(\route('public.view', ['slug' => $this->slug]))
;
}
public static function getFeedItems()
{
return self::where('slug', '!=', null)->limit(20)->get();
}
2020-07-23 12:26:10 +02:00
}