Intereting Posts
Могу ли я добавить промежуточное ПО к файлу Guzzle 6 HandlerStack по умолчанию, а не создавать новый стек? Вызовите внешнюю функцию API от контроллера, LARAVEL 4 Проверьте, действует ли ограничение open_basedir Передать переменную скрипту php, запущенному из командной строки Перенаправление на предыдущую страницу после входа? PHP Вызов функции undefined apache_request_headers () Могу ли я преобразовать функции mysql в PDO по одному за раз? Оптимизация полнотекстового поиска mysql Как вставить специальные символы в базу данных? Функция base_url () не работает в codeigniter Как совместить символы с акцентом с PHP preg? R не работает должным образом при использовании функции PHP exec () Заполнить список раскрывающихся списков в зависимости от другого варианта выпадающего списка, используя Ajax RSA-расшифровка данных в C # (.NET 3.5), которая была зашифрована с помощью openssl в php 5.3.2 Какова наилучшая практика создания пользовательской вспомогательной функции в php Laravel 5?

Переменная перехода от компонента к области модели

Я использую OctoberCMS на основе Laravel.

Я пытаюсь получить идентификатор из URL-адреса и передать его в Scope для фильтрации результатов базы данных.

$ this-> свойство ('username') работает и возвращает имя пользователя из URL-адреса.

Но как вы передаете его модели и в функцию Scope?

Вот руководство, в разделе «Динамические области».

https://octobercms.com/docs/database/model#query-scopes

страница

URL: localhost / user / matt

Идентификатор: / user /: имя пользователя

Компонент результатов

public function init() { // get username from url $username = $this->property('username'); //matt // pass username to scope Gallery::applyUser($username); } 

Модель галереи

 // return results that match username public function scopeApplyUser($query, $username) { return $query->where('username', $username); } 

ошибка

 Missing argument 2 for MyVendor\Gallery\Models\Gallery::scopeApplyUser() 

Решение?

Я обнаружил, что добавление ($ query, $ username = null) позволяет переменной проходить без ошибок.

Но теперь проблема в том, что $ username одновременно является «матовым» и «нулевым» и никогда не возвращает его в запрос.

 // return results that match username public function scopeApplyUser($query, $username = null) { print $username; //prints matt if ($username == null) { print 'null'; } //prints null return $query->where('username', $username); //returns null } 

диаграмма

В галерее моделей вам нужен пользователь поля:

 class Gallery extends Model { /** these are just placeholder variables you should be recognising these from your own model.!**/ protected $table = 'gallery'; protected $guarded = ['*']; protected $fillable = ['username'];// Make sure this also is in the database!! public scopeWhereUser($query, $user = null) { if(!is_null($user)) { // Only do something if the username is provided! $query->where('username',$user); } } } 

Затем, когда у вас есть nullchecks, вы можете просто называть его

  $gallery = new Gallery(); $query = $gallery->newQuery()->where('x','y')->whereUser('matt'); 

Изменения, которые я сделал:

  • переименовал область в whereuser вместо того, чтобы применять пользователя, потому что более логично называть его таким образом. Применяйте, вы делаете что-то функциональное, которое постоянно меняет состояние
  • добавлена ​​проверка is_null (), чтобы ограничить запрос только тогда, когда он не равен нулю.

полный рабочий пример, который печатает результаты:

  $gallery = new Gallery(); $query = $gallery->newQuery()->where('x','y')->whereUser('matt'); $results = $query->get(); foreach($results as $galleryItem) { echo $galleryItem->getKey() . ' is having:<BR/>'; echo dump([ 'model'=>$galleryItem, 'methods' => get_class_methods(get_class($galleryItem)), ]); }