-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSelectRemote.php
More file actions
91 lines (82 loc) · 2.71 KB
/
Copy pathSelectRemote.php
File metadata and controls
91 lines (82 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
namespace ModStart\Field;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Input\InputPackage;
use ModStart\Core\Input\Response;
use ModStart\Field\Concern\CanCascadeFields;
use ModStart\Field\Type\FieldRenderMode;
class SelectRemote extends AbstractField
{
use CanCascadeFields;
protected function setup()
{
$this->addVariables([
'server' => '',
]);
}
public function server($server)
{
$this->addVariables(['server' => $server]);
return $this;
}
/**
* 动态显示模型数据
* @param $table string 模型表名
* @param $valueKey string 模型主键,默认为id
* @param $labelKey string 模型显示字段,默认为title
* @return $this
*/
public function viewWithModel($table, $valueKey = 'id', $labelKey = 'title')
{
$this->hookRendering(function (AbstractField $field, $item, $index) use ($table, $valueKey, $labelKey) {
switch ($field->renderMode()) {
case FieldRenderMode::DETAIL:
case FieldRenderMode::GRID:
$value = $item[$field->name()];
$record = ModelUtil::get($table, [$valueKey => $value]);
if ($record) {
$value = $record[$labelKey];
}
return AutoRenderedFieldValue::make($value);
}
});
return $this;
}
/**
* @param $table string 模型表名
* @param $valueKey string 模型主键,默认为id
* @param $labelKey string 模型显示字段,默认为title
* @param $param array 查询参数
* @return array
*/
public static function handleModel($table, $valueKey = 'id', $labelKey = 'title', $param = [])
{
if (!isset($param['sort'])) {
$param['sort'] = ['id', 'desc'];
}
$input = InputPackage::buildFromInput();
$value = $input->getInteger('value');
$keywords = $input->getTrimString('keywords');
$query = ModelUtil::model($table);
if ($value) {
$query = $query->where($valueKey, $value);
}
if ($keywords) {
$query = $query->where($labelKey, 'like', '%' . $keywords . '%');
}
$records = $query
->orderBy($param['sort'][0], $param['sort'][1])
->limit(10)
->get([$valueKey, $labelKey])->toArray();
$options = [];
foreach ($records as $record) {
$options[] = [
'value' => $record[$valueKey],
'label' => $record[$labelKey],
];
}
return Response::generateSuccessData([
'options' => $options,
]);
}
}