CombineQueryTrait.php 2.3 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * trait :组合查询语句 trait
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Models\Traits
 * @package   App\Models\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年7月28日17:09:45
 * @copyright 2019-2020 Richer (http://www.xxx.com)
 * @license   http://www.xxx.com License
 * @link      http://www.xxx.com
 */
namespace App\Models\Traits;

/**
 * Trait CombineQueryTrait
 *
 * @category  App\Models\Traits
 * @package   App\Models\Traits
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年7月28日17:09:45
 * @copyright 2019-2020 Richer (http://www.xxx.com)
 * @license   http://www.xxx.com License
 * @link      http://www.xxx.com
 */
trait CombineQueryTrait
{
    /**
     * 组合
     *
     * @param $query
     * @param null $user user
     * @param array $columns
     * @return mixed
     */
    public function generateListQuery($query, $user = null, $columns = ['*'])
    {
        $query->when(
            $village_id = request('village_id'),
            function ($query) use ($village_id) {
                $query->where('village_id', $village_id);
            }
        )->when(
            $group_id = request('group_id'),
            function ($query) use ($group_id) {
                $query->where('group_id', $group_id);
            }
        )->when(
            $building_id = request('building_id'),
            function ($query) use ($building_id) {
                $query->where('building_id', $building_id);
            }
        )->when(
            $room_id = request('room_id'),
            function ($query) use ($room_id) {
                $query->where('room_id', $room_id);
            }
        )->when(
            $start_date = request('start_date'),
            function ($query) use ($start_date) {
                $query->whereDate('created_at', '>=', $start_date);
            }
        )->when(
            $end_date = request('end_date'),
            function ($query) use ($end_date) {
                $query->whereDate('created_at', '<', $end_date);
            }
        );

        return $query;
    }
}