縲伸aravel-admin縲第、懃エ「譚。莉カ縺ョ繧ォ繧ケ繧ソ繝槭う繧コ

Laravel縺ァ邁。蜊倥↓邂。逅逕サ髱「縺梧ァ狗ッ峨〒縺阪k繝ゥ繧、繝悶Λ繝ェLaravel-admin縺ォ縺ッ螟ァ螟峨♀荳冶ゥア縺ォ縺ェ縺」縺ヲ縺翫j縺セ縺吶

蝓コ譛ャ逧縺ェ邂。逅逕サ髱「縺ァ縺ゅl縺ー縺サ繧薙→縺ォ辷騾溘〒讒狗ッ峨〒縺阪∪縺吶@縲√き繧ケ繧ソ繝槭う繧コ繧蜈ャ蠑上ョ繝槭ル繝・繧「繝ォシ郁恭隱橸シ峨′蜈螳溘@縺ヲ縺繧九ョ縺ァ螟ァ謚オ縺ョ縺薙→縺ッ螳溽樟縺ァ縺阪∪縺吶

莉雁屓縺ッ繝槭ル繝・繧「繝ォ縺ォ險倩シ峨ョ縺ェ縺九▲縺滄Κ蛻縺ィ縺励※縲讀懃エ「鬆逶ョ繝サ讀懃エ「譚。莉カ縺ァ霑ス蜉縺励◆繧ォ繧ケ繧ソ繝槭う繧コ繧偵#邏ケ莉

Larave-admin縺ョ讀懃エ「逕サ髱「

Laravel-admin縺ョ邂。逅逕サ髱「縺ォ縺ッシ薙▽縺ョ讖溯ス縺後≠繧翫∪縺吶

讀懃エ「讖溯ス縺悟ョ夂セゥ縺輔l縺ヲ縺繧九ョ縺ッ縲√%縺ョ縺縺。縺ョgrid縺ォ縺ェ繧翫∪縺吶

讖溯ス隧ウ邏ー
grid讀懃エ「譚。莉カ繧讀懃エ「邨先棡繧貞ョ夂セゥ
笘莉雁屓縺ョ繝繝シ繝
show繝繝シ繧ソ縺ョ隧ウ邏ー陦ィ遉コ
form繝繝シ繧ソ縺ョ逋サ骭イ繝サ邱ィ髮

蝓コ譛ャ讖溯ス繧剃スソ縺」縺溘□縺代〒繧ゅ∽ク玖ィ倥ョ繧医≧縺ェ讀懃エ「逕サ髱「縺ィ讀懃エ「邨先棡縺瑚。ィ遉コ縺ァ縺阪∪縺吶

讀懃エ「逕サ髱「

縺薙ョ讀懃エ「鬆逶ョ繧貞ョ溽樟縺吶k縺溘a縺ョ繧ス繝シ繧ケ縺ッ縺溘▲縺溘ョ縺薙l縺縺代〒縺吶

        $grid->filter(function($filter){

            $filter->like('sei', '蟋');
            $filter->like('mei', '蜷');
            $filter->like('mail', '繝。繝シ繝ォ繧「繝峨Ξ繧ケ');

            $filter->like('tel', '髮サ隧ア逡ェ蜿キ');

            $filter->where(function ($query) {
                if($this->input[0] == '1'){
                    $date = Carbon::yesterday();

                    $query->where('created_at','>=',$date);
                }
            }, '譁ー隕丞・莨夊')->checkbox([
                '1' => '譁ー隕丞・莨夊'
            ]);

        });

蝓コ譛ャ縺ョ讀懃エ「譚。莉カ

邁。蜊倥↑讀懃エ「譚。莉カ縺ァ縺ゅl縺ー荳陦後〒險倩ソー縺ァ縺阪∪縺吶ゅ◎繧後◇繧後ョ讀懃エ「譚。莉カ縺ッAND譚。莉カ縺ォ縺ェ繧翫∪縺吶

讀懃エ「譚。莉カ繧剃ク驛ィ繧偵#邏ケ莉九>縺溘@縺セ縺吶

繧、繧ウ繝シ繝ォ

$filter->equal('column', $label);

like讀懃エ「

$filter->like('column', $label);

between

$filter->between('column', $label)->date();
$filter->between('column', $label)->datetime();
$filter->between('column', $label)->time();

where

$filter->where(function ($query) {
    $query->where('title', 'like', "%{$this->input}%");
}, 'Text');

orWhere

$filter->where(function ($query) {
    $query->where('title', 'like', "%{$this->input}%")
        ->orWhere('content', 'like', "%{$this->input}%");
}, 'Text');

蠢懃畑邱ィ

隍髮代↑譚。莉カ縺ォ縺ェ縺」縺ヲ縺上k縺ィ縲∬ィ倩ソー譁ケ豕輔′髮」縺励¥縺ェ縺」縺ヲ縺阪∪縺吶

SQL縺ァ縺ッ譖ク縺代k繧薙□縺代←縲√ヵ繝ャ繝シ繝繝ッ繝シ繧ッ縺ァ縺ョ譖ク縺肴婿縺悟縺九i縺ェ縺縺ィ縺縺縺ョ縺後%縺ョ霎コ繧翫°繧峨°縺ィ諤昴>縺セ縺吶

or縺ョ隍蜷域擅莉カ

date1縺ィdate2縺ォ縺、縺縺ヲ縲√悟ス捺律ス槫・蜉帶律莉倥阪ョ髢薙ョ譌・莉倥〒縺ゅk縺九←縺縺九r讀懃エ「蟇セ雎。縺ォ縺励※縺縺セ縺吶

$filter->where(function ($query) {
 $today = new Carbon();
 $query->where(function ($query) use($today){
  $query->where('date1','>=',$today->format('y-m-d'))->where('date1', '<=',$this->input);
 })->orWhere(function ($query) use($today){
  $query->where('date2','>=',$today->format('y-m-d'))->where('date2', '<=',$this->input);
 });
}, '譌・莉')->time();

        });

蜈・蜉帛螳ケ繧偵ヵ繝繧ッ縺励※讀懃エ「

萓九∴縺ー縲√ワ繝繧キ繝・蛹悶@縺ヲ縺繧九後ヱ繧ケ繝ッ繝シ繝峨阪r讀懃エ「縺励◆縺縺ィ縺阪↑縺ゥ

蜈・蜉帙@縺溷、繧偵◎縺ョ縺セ縺セ菴ソ縺縺ョ縺ァ縺ッ縺ェ縺丞、画鋤蜃ヲ逅繧定。後▲縺ヲ縺九i讀懃エ「譁蟄怜励→縺励※蛻ゥ逕ィ縺励◆縺蝣エ蜷医↓蛻ゥ逕ィ縺励∪縺吶

$filter->where(function ($query) {
  $query->whereHas('user', function ($query) {
  $hash = hash('sha256',preg_replace("/( |縲)/", "", $this->input));
  $query->where('password', '=', "{$hash}");
  });
}, '蟋');

讀懃エ「譚。莉カ縺ョ繧ォ繧ケ繧ソ繝槭う繧コ

Laravel-admin縺ォ螳夂セゥ縺輔l縺ヲ縺縺ェ縺讀懃エ「譚。莉カ繧定ソス蜉縺励※蛻ゥ逕ィ縺励◆縺蝣エ蜷医ッ縲∵、懃エ「譚。莉カ縺昴ョ繧ゅョ繧定ソス蜉縺励∪縺吶

繧オ繝ウ繝励Ν縺ィ縺励※縲√経rBetween縲阪→縺縺讀懃エ「譚。莉カ繧定ソス蜉縺励∪縺吶

orBetween

隍謨ー縺ョ繧ォ繝ゥ繝縺ォ蟇セ縺励※or讀懃エ「縺ァBetween譚。莉カ繧貞茜逕ィ縺励◆縺

讀懃エ「譚。莉カ縺ォ縺、縺縺ヲ縺ッ縲∽ク玖ィ倥ョ繧」繝ャ繧ッ繝医Μ縺ォ螳夂セゥ縺輔l縺ヲ縺縺セ縺吶

/vendor/encore/laravel-admin/src/Grid/Filter

莉雁屓縺ッBetween讖溯ス繧呈僑蠑オ縺励※繧ォ繧ケ繧ソ繝槭う繧コ縺励◆縺縺ョ縺ァ縲√%繧後r繧ウ繝斐シ縺励※蟆代@菫ョ豁」縺励∪縺吶

<?php

namespace App\Admin\Filter;

use Encore\Admin\Admin;
use Encore\Admin\Grid\Filter\AbstractFilter;
use Encore\Admin\Grid\Filter\Between;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log;

class CustomBetweenOrFilter extends AbstractFilter
{
    /**
     * {@inheritdoc}
     */
    protected $view = 'admin::filter.between';

    /**
     * Format id.
     *
     * @param string $column
     *
     * @return array|string
     */
    public function formatId($column)
    {
        $id = str_replace('.', '_', $column);

        return ['start' => "{$id}_start", 'end' => "{$id}_end"];
    }

    /**
     * Format two field names of this filter.
     *
     * @param string $column
     *
     * @return array
     */
    protected function formatName($column)
    {
        $columns = explode('.', $column);

        if (count($columns) == 1) {
            $name = $columns[0];
        } else {
            $name = array_shift($columns);

            foreach ($columns as $column) {
                $name .= "[$column]";
            }
        }

        return ['start' => "{$name}[start]", 'end' => "{$name}[end]"];
    }

    /**
     * Get condition of this filter.
     *
     * @param array $inputs
     *
     * @return mixed
     */
    public function condition($inputs)
    {
        if ($this->ignore) {
            return;
        }

        if (!Arr::has($inputs, $this->column)) {
            return;
        }

        $this->value = Arr::get($inputs, $this->column);

        $value = array_filter($this->value, function ($val) {
            return $val !== '';
        });

        if (empty($value)) {
            return;
        }


        if (!isset($value['start'])) {
            $this->query = 'orWhere'; //霑ス蜉
            return $this->buildCondition($this->column, '<=', $value['end']);
        }

        if (!isset($value['end'])) {
            $this->query = 'orWhere'; //霑ス蜉
            return $this->buildCondition($this->column, '>=', $value['start']);
        }

        $this->query = 'orWhereBetween'; // 蜿ウ險倥°繧我ソョ豁」$this->query = 'whereBetween';

        return $this->buildCondition($this->column, $this->value);
    }

    /**
     * @param array $options
     *
     * @return $this
     */
    public function datetime($options = [])
    {
        $this->view = 'admin::filter.betweenDatetime';

        $this->setupDatetime($options);

        return $this;
    }

    /**
     * @param array $options
     */
    protected function setupDatetime($options = [])
    {
        $options['format'] = Arr::get($options, 'format', 'YYYY-MM-DD HH:mm:ss');
        $options['locale'] = Arr::get($options, 'locale', config('app.locale'));

        $startOptions = json_encode($options);
        $endOptions = json_encode($options + ['useCurrent' => false]);

        $script = <<<EOT
            $('#{$this->id['start']}').datetimepicker($startOptions);
            $('#{$this->id['end']}').datetimepicker($endOptions);
            $("#{$this->id['start']}").on("dp.change", function (e) {
                $('#{$this->id['end']}').data("DateTimePicker").minDate(e.date);
            });
            $("#{$this->id['end']}").on("dp.change", function (e) {
                $('#{$this->id['start']}').data("DateTimePicker").maxDate(e.date);
            });
EOT;

        Admin::script($script);
    }

}

霑ス蜉縺励◆譚。莉カ縺ョ蛻ゥ逕ィ譁ケ豕

莉雁屓譁ー縺溘↓霑ス蜉縺励◆class繧置se蜿・繧剃スソ縺蛻ゥ逕ィ縺励∪縺吶

  $filter->use(new CustomBetweenOrFilter('date1', '譌・莉1'))->date();
  $filter->use(new CustomBetweenOrFilter('date2', '譌・莉2'))->date();

縺薙l縺ァ縲慧ate1繧ォ繝ゥ繝縺梧悄髢灘譌・莉倥〒縺ゅk縲√b縺励¥縺ッdate2繧ォ繝ゥ繝縺梧悄髢灘譌・莉倥〒縺ゅk縲阪→縺縺」縺滓擅莉カ縺ョ讀懃エ「縺悟庄閭ス縺ァ縺吶

縺セ縺ィ繧

Laravel-admin縺ォ髯舌i縺壹〒縺吶′縲√Λ繧、繝悶Λ繝ェ縺ェ縺ゥ蟆主・縺吶k縺ィ蝓コ譛ャ逧縺ェ縺薙→繧貞ョ溽樟縺吶k縺ォ縺ッ縺ィ縺ヲ繧よ・ス縺ォ縺ェ繧九ョ縺ァ縺吶′縲∝ー代@隍髮代↑縺薙→繧偵@繧医≧縺ィ縺吶k縺ィ譁迪ョ縺悟ー代↑縺剰協蜉エ縺吶k縺薙→縺悟、壹>縺ァ縺吶ュ縲

繧ス繝シ繧ケ繧呈ュ」縺励¥隗」譫舌☆繧後ー縺ゥ縺繧ォ繧ケ繧ソ繝槭う繧コ縺吶l縺ー縺縺縺句縺九k縺薙→縺悟、壹>縺ョ縺ァ縲√た繝シ繧ケ繧定ェュ縺ソ蜿悶k謚陦薙r繧ゅ▲縺ィ逎ィ縺縺ヲ縺縺阪◆縺縺ァ縺吶ュ

繧ウ繝。繝ウ繝医r谿九☆