預設每一個有列表頁index
的控制器都對應一個selectPage
,url('/admin/{controller}/selectPage')
;
class Member extends Controller
{
protected function initialize()
{
//...其他初始化
$this->selectTextField = '{id}#{nickname}({mobile})';
$this->selectSearch = 'nickname|mobile';
$this->selectIdField ='id';
$this->selectFields ='id,nickname,mobile';
$this->selectOrder = 'nickname';
$this->selectScope = [['enable', 'eq' ,1]];
}
}
說明
selectTextField
格式化顯示的文字,單個欄位直接用欄位名,多欄位名稱用大括號包圍;{fieldname}
。
如上面的格式表示:會員id#暱稱(手機號):
<select>
<option value="10001">10001#小明(13312345670)</option>
<option value="10003">10002#小紅(13312345671)</option>
<option value="10003">10003#小剛(13312345672)</option>
<select>
selectSearch
查詢欄位
使用者在下拉框中輸入字串查詢,ajax請求後臺介面,介面中返回暱稱
或手機號包含
這個關鍵字的資料。
核心程式碼:$kwd = input('q'); $data = $this->dataModel->where('nickname|mobile','like',"%$kwd%")->select();
selectIdField
鍵,控制的是<option value="10001">10001#小明(13312345670)</option>
中的value
對應到哪個欄位。如果鍵不是id
,那就需要設定。selectFields
優化查詢效果,比如上面的查詢,只需要id
、nickname
、mobile
三個欄位。預設是*
全部欄位,如果追求效能,可以設定查詢欄位只這三個 。selectOrder
顧名思義,排序方式。selectScope
預設條件,比如上面的例子,只顯示已啟用的使用者,未啟用的就不顯示出來讓選擇。
其他說明
selectTextField
、selectIdField
是預設情況,如果使用select
的dataUrl
方法時沒設定textField
、idField
兩個引數,就按預設配置的。
預設情況:
$select->select('member_id', '會員')->dataUrl(url('/admin/member/selectPage'));
<select>
<option value="10001">10001#小明(13312345670)</option>
<option value="10003">10002#小紅(13312345671)</option>
<option value="10003">10003#小剛(13312345672)</option>
<select>
如果指定了textField
、idField
,就可以覆蓋:
$select->select('mobile', '會員手機')->dataUrl(url('/admin/member/selectPage'),'{id}#{nickname}','mobile');
<select>
<option value="13312345670">10001#小明</option>
<option value="13312345671">10002#小紅</option>
<option value="13312345672">10003#小剛</option>
<select>
textField
是單個欄位,大括號{}
省略idField
未指定,用預設
$select->select('mobile', '會員手機')->dataUrl(url('/admin/member/selectPage'),'nickname');
<select>
<option value="10001">小明</option>
<option value="10003">小紅</option>
<option value="10003">小剛</option>
<select>
模型關聯
//使用者模型:Member
class Member extends Model
{
/** **/
public function level()
{
return $this->belongsTo(MelberLevel::class, 'level_id', 'id');//MelberLevel是使用者等級的模型類
}
}
//控制器
class Member extends Controller
{
protected function initialize()
{
//...其他初始化
$this->selectTextField = '{id}#{nickname}({level.name})';
$this->selectSearch = 'nickname|mobile';
$this->selectIdField ='id';
$this->selectFields ='id,nickname,level_id';// `level_id`這個欄位是必須的
$this->selectOrder = 'nickname';
$this->selectScope = [['enable', 'eq' ,1]];
$this->selectWith= ['level'];//關聯模型
}
}
$select->select('member_id', '會員')->dataUrl(url('/admin/member/selectPage'));
<select>
<option value="10001">10001#小明(一年級)</option>
<option value="10002">10002#小剛(二年級)</option>
<option value="10003">10003#小紅(三年級)</option>
<select>
本作品採用《CC 協議》,轉載必須註明作者和本文連結