ChannelPagesCriteria.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace App\Repositories\Criterias;
  3. use KZ2\Laravel\Repositories\Contracts\RepositoryInterface as Repository;
  4. use KZ2\Laravel\Repositories\Criteria\Criteria;
  5. class ChannelPagesCriteria extends Criteria
  6. {
  7. private $params = [];
  8. public function __construct($params = [])
  9. {
  10. $this->params = $params;
  11. }
  12. public function apply($model, Repository $repository)
  13. {
  14. if (!empty($this->params['uid'])) {
  15. $model = $model->where('uid', 'LIKE', '%' . $this->params['uid'] . '%');
  16. }
  17. if (!empty($this->params['agent_uid'])) {
  18. $model = $model->where('agent_uid', $this->params['agent_uid']);
  19. }
  20. if (!empty($this->params['mom_app_uid'])) {
  21. $model = $model->where('mom_app_uid', $this->params['mom_app_uid']);
  22. }
  23. $agentNick = $this->params['agent_username'] ?? null;
  24. $model = $model->whereHas(
  25. 'agentName', function ($query) use ($agentNick) {
  26. if (!empty($agentNick)) {
  27. $query->where('nick', $agentNick);
  28. }
  29. })->with([
  30. 'agentName' => function ($query) {
  31. $query->select(
  32. 'uid',
  33. 'nick',
  34. );
  35. }
  36. ]);
  37. $model = $model->with(['channelRow'=>function($q){
  38. $q->select('channel_code','android_or_ios','mom_app_version','app_download','status');
  39. }]);
  40. return $model;
  41. }
  42. }