2018-12-10 07:27:23 +00:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Created by PhpStorm.
|
|
|
|
|
* User: merdan
|
|
|
|
|
* Date: 12/9/2018
|
|
|
|
|
* Time: 9:52 PM
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
|
|
|
2019-09-28 07:05:26 +00:00
|
|
|
use Illuminate\Support\Carbon;
|
2019-09-14 12:27:41 +00:00
|
|
|
use Illuminate\Support\Facades\Config;
|
2019-09-28 07:05:26 +00:00
|
|
|
use Illuminate\Support\Facades\DB;
|
2019-09-14 12:27:41 +00:00
|
|
|
use Illuminate\Support\Str;
|
|
|
|
|
|
2019-08-24 06:55:14 +00:00
|
|
|
class Category extends \Illuminate\Database\Eloquent\Model{
|
2018-12-15 11:45:08 +00:00
|
|
|
use \Backpack\CRUD\CrudTrait;
|
2018-12-10 07:27:23 +00:00
|
|
|
/**
|
|
|
|
|
* Indicates whether the model should be timestamped.
|
|
|
|
|
*
|
|
|
|
|
* @var bool $timestamps
|
|
|
|
|
*/
|
|
|
|
|
public $timestamps = false;
|
|
|
|
|
/**
|
|
|
|
|
* The database table used by the model.
|
|
|
|
|
*
|
|
|
|
|
* @var string $table
|
|
|
|
|
*/
|
|
|
|
|
protected $table = 'categories';
|
|
|
|
|
/**
|
|
|
|
|
* Indicates whether the model should use soft deletes.
|
|
|
|
|
*
|
|
|
|
|
* @var bool $softDelete
|
|
|
|
|
*/
|
|
|
|
|
protected $softDelete = false;
|
2019-09-10 13:33:55 +00:00
|
|
|
protected $fillable = ['title_tm','title_ru','view_type','lft','rgt','parent_id','depth'];
|
2019-09-14 12:27:41 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the url of the event.
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public function getUrlAttribute()
|
|
|
|
|
{
|
|
|
|
|
return route("showCategoryEventsPage", ["cat_id"=>$this->id, "cat_slug"=>Str::slug($this->title)]);
|
|
|
|
|
//return URL::to('/') . '/e/' . $this->id . '/' . Str::slug($this->title);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getTitleAttribute(){
|
|
|
|
|
|
|
|
|
|
return $this->{'title_'.Config::get('app.locale')};
|
|
|
|
|
}
|
2018-12-10 07:27:23 +00:00
|
|
|
/**
|
2019-08-24 06:55:14 +00:00
|
|
|
* The events associated with the category.
|
2018-12-10 07:27:23 +00:00
|
|
|
*
|
2019-08-24 06:55:14 +00:00
|
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
2018-12-10 07:27:23 +00:00
|
|
|
*/
|
2019-08-24 06:55:14 +00:00
|
|
|
public function events(){
|
|
|
|
|
return $this->hasMany(\App\Models\Event::class);
|
|
|
|
|
}
|
|
|
|
|
|
2019-09-28 07:05:26 +00:00
|
|
|
public function cat_events(){
|
|
|
|
|
return $this->hasMany(\App\Models\Event::class,'sub_category_id')
|
|
|
|
|
->withCount(['stats as views' => function($q){
|
|
|
|
|
$q->select(DB::raw("SUM(views) as v"));
|
|
|
|
|
}]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function scopeCategoryLiveEvents($query,$limit){
|
|
|
|
|
// dd($this->view_type);
|
|
|
|
|
return $query->select('id','title_tm','title_ru','lft')
|
|
|
|
|
->orderBy('lft')
|
|
|
|
|
->with(['events' => function($q) use($limit){
|
|
|
|
|
$q->select('id','title','description','category_id','sub_category_id','start_date')
|
|
|
|
|
->limit($limit)
|
|
|
|
|
->with('starting_ticket')
|
|
|
|
|
->withCount(['stats as views' => function($q){
|
|
|
|
|
$q->select(DB::raw("SUM(views) as v"));
|
|
|
|
|
}])
|
|
|
|
|
->onLive();
|
|
|
|
|
}]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function parent(){
|
|
|
|
|
return $this->belongsTo(Category::class,'parent_id');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function children(){
|
|
|
|
|
return $this->hasMany(Category::class,'parent_id')
|
|
|
|
|
->select('id','title_ru','title_tm','parent_id','lft')
|
|
|
|
|
->orderBy('lft');
|
|
|
|
|
}
|
2019-08-24 06:55:14 +00:00
|
|
|
public function scopeMain($query){
|
2019-08-28 06:34:37 +00:00
|
|
|
return $query->where('depth',1)->orderBy('lft','asc');
|
2019-08-24 06:55:14 +00:00
|
|
|
}
|
2019-09-28 07:05:26 +00:00
|
|
|
|
2019-08-24 06:55:14 +00:00
|
|
|
public function scopeSub($query){
|
2019-09-10 13:33:55 +00:00
|
|
|
return $query->where('depth',2)->orderBy('lft','asc');
|
2019-08-24 06:55:14 +00:00
|
|
|
}
|
|
|
|
|
|
2019-09-23 10:35:40 +00:00
|
|
|
public function scopeChildren($query,$parent_id){
|
|
|
|
|
return $query->where('parent_id',$parent_id)->orderBy('lft','asc');
|
2018-12-10 07:27:23 +00:00
|
|
|
}
|
2019-09-16 13:30:51 +00:00
|
|
|
|
2019-09-28 07:05:26 +00:00
|
|
|
public function scopeWithLiveEvents($query, $date = false, $popular = true){
|
|
|
|
|
$limit = 8;
|
|
|
|
|
return $query->with(['cat_events' => function($query) use ($date, $limit, $popular) {
|
|
|
|
|
$query->select('id','title','description','category_id','sub_category_id','start_date')
|
|
|
|
|
->limit($limit)
|
|
|
|
|
->with('starting_ticket')
|
|
|
|
|
->withCount(['stats as views' => function($q){
|
|
|
|
|
$q->select(DB::raw("SUM(views) as v"));}])
|
|
|
|
|
->onLive();//event scope onLive get only live events
|
|
|
|
|
if($date)
|
|
|
|
|
$query->whereDate('end_date','>=',Carbon::parse($date));
|
|
|
|
|
|
|
|
|
|
if($popular)
|
|
|
|
|
$query->orderBy('views','desc');
|
|
|
|
|
else
|
|
|
|
|
$query->orderBy('start_date');
|
|
|
|
|
}]);
|
|
|
|
|
|
2019-09-16 13:30:51 +00:00
|
|
|
}
|
2019-09-28 07:05:26 +00:00
|
|
|
|
2018-12-10 07:27:23 +00:00
|
|
|
}
|