добавил скоуп для отбора по городам
This commit is contained in:
parent
fd7a9bb86d
commit
484e364831
@ -4,6 +4,7 @@
|
||||
use Modules\Main\Models\Company\Company;
|
||||
use Modules\Main\Models\Company\CompanyAdmin;
|
||||
use Modules\CityManager\Models\CityManager;
|
||||
use Modules\Main\Models\City;
|
||||
use Modules\Main\Models\Agent\Agent;
|
||||
use Modules\Main\Models\Complex;
|
||||
use Modules\User\Models\Role;
|
||||
@ -62,7 +63,8 @@ function GetAvailableAgents($resultType = 'Collection')
|
||||
return $agents->get();
|
||||
} else {
|
||||
return $agents;
|
||||
};
|
||||
}
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,7 +95,8 @@ function GetAvailableCompanies($resultType = 'Collection')
|
||||
return $companies->get();
|
||||
} else {
|
||||
return $companies;
|
||||
};
|
||||
}
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,7 +126,33 @@ function GetAvailableComplexes()
|
||||
if (!function_exists('GetAvailableCities')) {
|
||||
function GetAvailableCities()
|
||||
{
|
||||
$agents = [];
|
||||
$user = auth()->user();
|
||||
if ($user->hasRole(Role::SUPER_ADMIN)) {
|
||||
return City::all();
|
||||
}
|
||||
if ($user->hasRole(Role::CITY_MANAGER)) {
|
||||
$cititesOfManager = CityManager::where('user_id', $user->id)->pluck('city_id')->get();
|
||||
if ($cititesOfManager->count()) {
|
||||
return City::whereIn('id', $cititesOfManager)->get();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if ($user->hasRole(Role::COMPANY_ADMIN)) {
|
||||
$adminCompany = AdminCompanyOfUser();
|
||||
if ($adminCompany->count()) {
|
||||
return City::where('id', $adminCompany->city_id)->get();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if ($user->hasRole(Role::AGENT)) {
|
||||
$agentCompany = AgentCompanyOfUser();
|
||||
if ($agentCompany->count()) {
|
||||
return City::where('id', $agentCompany->city_id)->get();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
/*$agents = [];
|
||||
if ($adminCompany = AdminCompanyOfUser()) {
|
||||
$agents = Agent::where('company_id', $adminCompany->id);
|
||||
} else {
|
||||
@ -136,6 +165,6 @@ function GetAvailableCities()
|
||||
}
|
||||
$agents->with('company:id,name');
|
||||
$agents->with('user:id,name');
|
||||
return $agents->get();
|
||||
return $agents->get();*/
|
||||
}
|
||||
}
|
||||
32
app/Modules/Main/Models/Scopes/CityScope.php
Normal file
32
app/Modules/Main/Models/Scopes/CityScope.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Modules\Main\Models\Scopes;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Scope;
|
||||
|
||||
class CityScope implements Scope
|
||||
{
|
||||
/**
|
||||
* Apply the scope to a given Eloquent query builder.
|
||||
*/
|
||||
public function apply(Builder $builder, Model $model): void
|
||||
{
|
||||
if ($model->cities()->count()) { //если города для новости установлены
|
||||
if ($cities = GetAvailableCities()) { //получаю доступные пользователю города
|
||||
$citiesIds = [];
|
||||
foreach ($cities as $city) {
|
||||
$citiesIds[] = $city->id;
|
||||
}
|
||||
$builder->whereHas('cities', fn($q) => $q->whereIn('cities.id', $citiesIds));
|
||||
|
||||
} else {
|
||||
$builder->where('id', 0);//не знаю, как сделать, чтобы выбор был гарантированно пустой
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
//$builder->where('created_at', '<', now()->minus(years: 2000));
|
||||
}
|
||||
}
|
||||
?>
|
||||
@ -6,6 +6,8 @@
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||
use Modules\Main\Models\CityAppend;
|
||||
use Modules\Main\Models\City;
|
||||
use Modules\User\Models\User;
|
||||
|
||||
trait CityAppendTrait
|
||||
{
|
||||
@ -14,9 +16,13 @@ public function cities(): MorphMany
|
||||
return $this->MorphMany(CityAppend::class, 'append');
|
||||
}
|
||||
|
||||
public function byCity(Builder $query, $cityId)
|
||||
public function byCity()
|
||||
{
|
||||
//return $query->where('category', $category);
|
||||
$user = null;
|
||||
settype($user, User::class);
|
||||
$user = auth()->user();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,16 +3,18 @@
|
||||
namespace Modules\Post\Models;
|
||||
|
||||
use Modules\Main\Models\City;
|
||||
use Modules\Post\Models\PostCity;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
use Modules\Main\Traits\CityAppendTrait;
|
||||
use Modules\Main\Models\Scopes\CityScope;
|
||||
|
||||
class Post extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use CityAppendTrait;
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
@ -21,4 +23,21 @@ class Post extends Model
|
||||
'category',
|
||||
'image'
|
||||
];
|
||||
|
||||
protected static function booted(): void
|
||||
{
|
||||
static::addGlobalScope(new CityScope);
|
||||
}
|
||||
|
||||
public function cities(): HasManyThrough
|
||||
{
|
||||
return $this->hasManyThrough(
|
||||
City::class,
|
||||
PostCity::class,
|
||||
'post_id',
|
||||
'id',
|
||||
'id',
|
||||
'city_id'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
18
app/Modules/Post/Models/PostCity.php
Normal file
18
app/Modules/Post/Models/PostCity.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Post\Models;
|
||||
|
||||
use Modules\Main\Models\City;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
use Modules\Main\Models\Scopes\CityScope;
|
||||
|
||||
class PostCity extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'post_id',
|
||||
'city_id',
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user