ultimatepos/app/Category.php

110 lines
2.9 KiB
PHP

<?php
namespace App;
use DB;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Category extends Model
{
use SoftDeletes;
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = ['id'];
/**
* Combines Category and sub-category
*
* @param int $business_id
* @return array
*/
public static function catAndSubCategories($business_id)
{
$all_categories = Category::where('business_id', $business_id)
->where('category_type', 'product')
->orderBy('name', 'asc')
->get()
->toArray();
if (empty($all_categories)) {
return [];
}
$categories = [];
$sub_categories = [];
foreach ($all_categories as $category) {
if ($category['parent_id'] == 0) {
$categories[] = $category;
} else {
$sub_categories[] = $category;
}
}
$sub_cat_by_parent = [];
if (! empty($sub_categories)) {
foreach ($sub_categories as $sub_category) {
if (empty($sub_cat_by_parent[$sub_category['parent_id']])) {
$sub_cat_by_parent[$sub_category['parent_id']] = [];
}
$sub_cat_by_parent[$sub_category['parent_id']][] = $sub_category;
}
}
foreach ($categories as $key => $value) {
if (! empty($sub_cat_by_parent[$value['id']])) {
$categories[$key]['sub_categories'] = $sub_cat_by_parent[$value['id']];
}
}
return $categories;
}
/**
* Category Dropdown
*
* @param int $business_id
* @param string $type category type
* @return array
*/
public static function forDropdown($business_id, $type)
{
$categories = Category::where('business_id', $business_id)
->where('parent_id', 0)
->where('category_type', $type)
->select(DB::raw('IF(short_code IS NOT NULL, CONCAT(name, "-", short_code), name) as name'), 'id')
->orderBy('name', 'asc')
->get();
$dropdown = $categories->pluck('name', 'id');
return $dropdown;
}
public function sub_categories()
{
return $this->hasMany(\App\Category::class, 'parent_id');
}
/**
* Scope a query to only include main categories.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeOnlyParent($query)
{
return $query->where('parent_id', 0);
}
}