縲伸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繧ゅ▲縺ィ逎ィ縺縺ヲ縺縺阪◆縺縺ァ縺吶ュ


