![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/syn.corals.io/Corals/modules/Syndicate/Models/Scopes/ |
<?php namespace Corals\Modules\Syndicate\Models\Scopes; use Corals\User\Models\Role; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; use Illuminate\Support\Arr; class RolesScope implements Scope { private $roles; public function __construct($roles) { $this->roles = Arr::wrap($roles); } /** * Apply the scope to a given Eloquent query builder. * * @param Builder $builder * @param Model $model * @return void */ public function apply(Builder $builder, Model $model) { $modelQuery = sprintf("model_has_roles.model_type = '%s'", $model->getMorphClass()); $tableName = $model->getTable(); $roles = Role::whereIn('name', $this->roles)->pluck('id')->toArray(); $builder ->join('model_has_roles', function ($join) use ($tableName, $model, $modelQuery) { $join->on('model_has_roles.model_id', '=', $tableName . '.id') ->whereRaw($modelQuery); }) ->whereIn('model_has_roles.role_id', $roles) ->select($tableName . '.*'); } }