добавил скоуп для отбора по городам
This commit is contained in:
parent
fd7a9bb86d
commit
484e364831
@ -4,6 +4,7 @@
|
|||||||
use Modules\Main\Models\Company\Company;
|
use Modules\Main\Models\Company\Company;
|
||||||
use Modules\Main\Models\Company\CompanyAdmin;
|
use Modules\Main\Models\Company\CompanyAdmin;
|
||||||
use Modules\CityManager\Models\CityManager;
|
use Modules\CityManager\Models\CityManager;
|
||||||
|
use Modules\Main\Models\City;
|
||||||
use Modules\Main\Models\Agent\Agent;
|
use Modules\Main\Models\Agent\Agent;
|
||||||
use Modules\Main\Models\Complex;
|
use Modules\Main\Models\Complex;
|
||||||
use Modules\User\Models\Role;
|
use Modules\User\Models\Role;
|
||||||
@ -62,7 +63,8 @@ function GetAvailableAgents($resultType = 'Collection')
|
|||||||
return $agents->get();
|
return $agents->get();
|
||||||
} else {
|
} else {
|
||||||
return $agents;
|
return $agents;
|
||||||
};
|
}
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +79,7 @@ function GetAvailableCompanies($resultType = 'Collection')
|
|||||||
if ($adminCompany = AdminCompanyOfUser()) {
|
if ($adminCompany = AdminCompanyOfUser()) {
|
||||||
$companiesIds[] = $adminCompany->id;
|
$companiesIds[] = $adminCompany->id;
|
||||||
}
|
}
|
||||||
if ($cityManager = CityManager::where('user_id', auth()->user()->id)) {
|
if ($cityManager = CityManager::where('user_id', auth()->user()->id)) {
|
||||||
if ($cityManager->count()) {
|
if ($cityManager->count()) {
|
||||||
$companies = Company::whereIn('city_id', $cityManager->pluck('city_id'));
|
$companies = Company::whereIn('city_id', $cityManager->pluck('city_id'));
|
||||||
if ($companies->count()) {
|
if ($companies->count()) {
|
||||||
@ -93,7 +95,8 @@ function GetAvailableCompanies($resultType = 'Collection')
|
|||||||
return $companies->get();
|
return $companies->get();
|
||||||
} else {
|
} else {
|
||||||
return $companies;
|
return $companies;
|
||||||
};
|
}
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +126,33 @@ function GetAvailableComplexes()
|
|||||||
if (!function_exists('GetAvailableCities')) {
|
if (!function_exists('GetAvailableCities')) {
|
||||||
function 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()) {
|
if ($adminCompany = AdminCompanyOfUser()) {
|
||||||
$agents = Agent::where('company_id', $adminCompany->id);
|
$agents = Agent::where('company_id', $adminCompany->id);
|
||||||
} else {
|
} else {
|
||||||
@ -136,6 +165,6 @@ function GetAvailableCities()
|
|||||||
}
|
}
|
||||||
$agents->with('company:id,name');
|
$agents->with('company:id,name');
|
||||||
$agents->with('user: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\MorphMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||||
use Modules\Main\Models\CityAppend;
|
use Modules\Main\Models\CityAppend;
|
||||||
|
use Modules\Main\Models\City;
|
||||||
|
use Modules\User\Models\User;
|
||||||
|
|
||||||
trait CityAppendTrait
|
trait CityAppendTrait
|
||||||
{
|
{
|
||||||
@ -14,9 +16,13 @@ public function cities(): MorphMany
|
|||||||
return $this->MorphMany(CityAppend::class, 'append');
|
return $this->MorphMany(CityAppend::class, 'append');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function byCity(Builder $query, $cityId)
|
public function byCity()
|
||||||
{
|
{
|
||||||
//return $query->where('category', $category);
|
//return $query->where('category', $category);
|
||||||
|
$user = null;
|
||||||
|
settype($user, User::class);
|
||||||
|
$user = auth()->user();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,16 +3,18 @@
|
|||||||
namespace Modules\Post\Models;
|
namespace Modules\Post\Models;
|
||||||
|
|
||||||
use Modules\Main\Models\City;
|
use Modules\Main\Models\City;
|
||||||
|
use Modules\Post\Models\PostCity;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
|
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
|
class Post extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
use CityAppendTrait;
|
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name',
|
'name',
|
||||||
@ -21,4 +23,21 @@ class Post extends Model
|
|||||||
'category',
|
'category',
|
||||||
'image'
|
'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