Laravel-admin Form linkage 多選問題

多選搭配 ->when() 在編輯資料的時候都會出現 addslashes() expects parameter 1 to be string, array given 問題,新增資料則正常。
$form
    ->multipleSelect('nationality', 'Nationality')
    ->options([
        1 => 'China',
        2 => 'foreign',
    ])
    ->when('has', 2, function (Form $form) {
        $form->text('name', 'Name');
    });
發生原因是 Select class JS 會用到 addslashes() 函數,單選的時候把單個 value 傳給函數處理沒問題;多選時變成傳一個陣列,就會出錯。
解決方法是不要用 ->when(),把兩個欄位拆開來寫,再另外寫 JS 控制欄位的顯示或隱藏。
$form
    ->multipleSelect('nationality', 'Nationality')
    ->options([
        1 => 'China',
        2 => 'foreign',
    ]);
$form->text('name', 'Name');

Admin::script("
    $('.nationality').on('change', function (e) {
        var checked = $(this).val();
        if ($.inArray('2', checked) != -1) {
            $('.name').closest('.form-group').removeClass('hide');
        } else {
            $('.name').closest('.form-group').addClass('hide');
        }
    }).trigger('change');
");

留言