composer require avxman/ratings
После установки модуля не забываем объязательно запустить команды artisan:
php artisan vendor:publish --tag="avxman-ratings-config"
,
php artisan vendor:publish --tag="avxman-ratings-migrate"
и после php artisan migrate
.
Это установит таблицу рейтинга для получения и сохранения данных.
- Выгружаем все файлы
php artisan vendor:publish --tag="avxman-ratings-all"
- Выгружаем миграционные файлы
php artisan vendor:publish --tag="avxman-ratings-migrate"
- Выгружаем файлы моделек
php artisan vendor:publish --tag="avxman-ratings-model"
- Выгружаем шаблонные файлы
php artisan vendor:publish --tag="avxman-ratings-view"
- Выгружаем конфигурационные файлы
php artisan vendor:publish --tag="avxman-ratings-config"
setEnabled()
- перезаписываем вкл./откл. рейтинга определённой моделиsetIp()
- перезаписываем Ip адрес пользователяsetUserAgent()
- перезаписываем User agent пользователяsetType()
- перезаписываем тип рейтингаsetView()
- перезаписываем шаблоны рейтингаsetModelName()
- перезаписываем модель рейтингаsetModelUserName()
- перезаписываем модель рейтинга пользователяsetExceptModel()
- перезаписываем исключение моделей, которые не будут участвовать в рейтингеreset()
- сбор параметров рейтинга
isError()
- найдена ли ошибка или отключён рейтингgetOne()
- получение рейтинга одиночного результата из моделиgetMany()
- получение рейтинга множественного результата из моделиsave()
- сохранение рейтинга определённой модели
toCollection()
- получаем результат в виде коллекцииtoArray()
- получаем результат в виде массиваtoJson()
- получаем результат в виде jsontoHtml()
- получаем результат в виде html
При использовании данного метода в классе модели которую привязываем
к рейтингу нужно добавить трейт Avxman\Rating\Traits\RatingModelTrait
.
Когда в модели уже ранее Вами был написан метод rating()
,
тогда его нужно переименовать, так как трейт использует данный метод
Метод может наследовать Дополнительные методы (очерёдность первичная)
перед вызовом save()
К примеру:
\Avxman\Rating\Facades\RatingFacade::save(collect([
'model'=>\App\Models\User::class,
'model_id'=>'1',
'rating'=>'1'
]));
\Avxman\Rating\Facades\RatingFacade::save(collect([
'model'=>\App\Models\AnyModel::class,
'model_id'=>'1',
'rating'=>'1',
'type'=>'five'
]), true);
$collection
- коллекция входных данных ['model'=>string,'model_id'=>string|int,'rating'=>string|int,'type'=>string]
model
- имя модели;
model_id
- ID модели;
rating
- оценка рейтинга;
type
- тип рейтинга,type_list
данные из ключа конфигурационного файла rating.php.
Обязательных данных['model','model_id','rating']
$isPermission
- [false, true]
false
- сохраняем рейтинг, при условии, что рейтинг с указанной моделью уже существует в таблице рейтингов
true
- сохраняем рейтинг в любом случаи, даже при отсутствии модели в таблице рейтингов. При отсутствии - создается новая запись в таблице (будьте осторожны, так как можно записать не существующую модель)return bool
- возвращает логический результат, при удачной записи - true
use App\Models\User;
use Avxman\Rating\Facades\RatingFacade;
//Получаем одиночный рейтинг (только одна модель)
$user = User::with('rating')->first();
RatingFacade::setEnabled(false)->getOne($user);
RatingFacade::setIp('111.111.111.111')->getOne($user);
RatingFacade::setUserAgent('a new user agent')->getOne($user);
RatingFacade::setType('ten')->getOne($user);
RatingFacade::setView('vendor.rating.ten.items', 'vendor.rating.ten._item')->getOne($user);
RatingFacade::setModelName(RatingNewModel::class)->getOne($user);
RatingFacade::setModelUserName(RatingUserNewModel::class)->getOne($user);
RatingFacade::setExceptModel([User::class])->getOne($user);
RatingFacade::reset()->getOne($user);
RatingFacade::isError();
RatingFacade::getOne($user)->toCollection();
RatingFacade::getOne($user)->toArray();
RatingFacade::getOne($user)->toJson();
RatingFacade::getOne($user)->toHtml();
//Получение множественного рейтинга (коллекция из одного типа модели)
//Для работы с множественным рейтингом нужно подключить трейт к модели
//для использования связей (читаем "Использование метода getMany()")
$users = User::with('rating')->get();
RatingFacade::setEnabled(false)->getMany($users, 'toHtml');
RatingFacade::setIp('111.111.111.111')->getMany($users, 'toHtml');
RatingFacade::setUserAgent('a new user agent')->getMany($users, 'toHtml');
RatingFacade::setType('ten')->getMany($users, 'toHtml');
RatingFacade::setView('vendor.rating.ten.items', 'vendor.rating.ten._item')->getMany($users, 'toHtml');
RatingFacade::setModelName(RatingNewModel::class)->getMany($users, 'toHtml');
RatingFacade::setModelUserName(RatingUserNewModel::class)->getMany($users, 'toHtml');
RatingFacade::setExceptModel([User::class])->getMany($users, 'toHtml');
RatingFacade::reset()->getMany($users, 'toHtml');
RatingFacade::getMany($users, 'toCollection');
RatingFacade::getMany($users, 'toArray');
RatingFacade::getMany($users, 'toJson');
RatingFacade::getMany($users, 'toHtml');
$this->result['ratings'] = $users->first()->getRating??'';
// Все вышеуказанные функция одиночного рейтинга работают и в шаблонах
{{RatingFacade::getOne($user)->toHtml()}}
// или
{{RatingFacade::setType('ten')->getOne($user)->toJson()}}
// Все вышеуказанные функция множественного рейтинга работают и в шаблонах
{{RatingFacade::getMany($users, 'toHtml')}}
// или
{{RatingFacade::setType('ten')->getMany($users, 'toJson')}}