У меня возникли проблемы с тем, чтобы часть кода работала в laravel. У меня есть класс SecuredElquent, который распространяется на все мои «защищенные» модели. то, что он делает, просто добавляет предложение whereHas к запросу в функции newQuery, которую я переопределяю:
class SecuredEloquent extends Eloquent { public function newQuery($excludeDeleted = true) { $query = parent::newQuery($excludeDeleted); $context = App::make('Wall\Context\Context'); $query->whereHas('permissions', function($q) use ($context) { $q->where('context_id','=',$context->id()); $q->where('level','>=', $context->level()); }); return $query; } }
Проблема: она не работает. Я получаю ошибки «Соединение было сброшено» в моем браузере и ничего в журнале 🙁 Кто-нибудь знает, что я делаю неправильно?
edit2: MyModel расширяет SecuredElquent, OtherModel не делает
Когда я пытаюсь запустить его в ремесленнике, ничего не происходит. var_dump (MyModel :: все ()); просто останавливает процесс (он выходит из строя? нет идеи, снова ничего не регистрируется, он просто уходит) var_dump (OtherModel :: all ()); однако просто работает
редактировать:
У меня есть ContextServiceProvider:
use Illuminate\Support\ServiceProvider; class ContextServiceProvider extends ServiceProvider { /** * Register */ public function register() { $this->app->singleton('Wall\Context\Context', function($app) { return new AppContext; }); } }
с AppContext:
use Illuminate\Database\Eloquent\Model; class AppContext { /** * The current context * * @var Illuminate\Database\Eloquent\Model */ protected $context; /** * The current context level * * @var int */ protected $level; /** * Check to see if the context has been set * * @return boolean */ public function has() { if($this->context) return true; return false; } /** * Get the context identifier * * @return integer */ public function id() { if ( $this->has() ) return $this->context->id; return 0; } /** * Get the context permission leven * * @return string */ public function level() { if ( $this->level ) return $this->level; return 1; } }
Надеюсь это поможет