пытается получить значение массива из моделей. Octobercms

У меня проблемы с получением значения массива в модели. Итак, у меня есть модель с полем повторителя. теперь я пытаюсь получить доступ к значению этого поля повторителя из другой модели.

вот что я сделал ..

ОБНОВЛЕНО

fields.yaml в модели WartaDataProfil

fields:
visimisi:
    label: 'Visi Misi'
    ---
jdwlibdh:
    label: 'Jadwal'
    oc.commentPosition: ''
    prompt: 'add'
    maxItems: '7'
    span: full
    type: repeater
    form:
        fields:
            jeniskeb:
                label: 'Jenis'
                ---
            jamibdh:
                label: 'Jam'
                ---
            kategori:
                label: 'Kategori'
                type: dropdown
                options:
                    Umum/Raya: Umum/Raya
                    Komisi/Kategorial: Komisi/Kategorial

название модели WartaDataProfil

class WartaDataProfil extends Model
{
  use \October\Rain\Database\Traits\Validation;

  public $timestamps = false;

  public $rules = [
  ];   
  public $table = 'mismaiti_mywarta_profil';

  protected $jsonable = ['pdtjmt','jdwlibdh','komisi','bidang'];

  public $attachOne = [

      'logogereja' => 'System\Models\File',
      'logomywarta' => 'System\Models\File'

    ];
}

я хочу получить данные из поля 'jeniskeb' в WartaDataProfil для использования в другой модели (скажем, модель WartaRutin) в виде раскрывающихся опций в одном из полей, поэтому я пишу их на модели WartaRutin

fields.yaml в модели WartaRutin

tabs:
fields:        
    tanggal:
        label: Tanggal            
        mode: date
        format: 'd - F - Y'
        span: storm
        cssClass: col-sm-4 col-sm-push-0
        type: datepicker
        tab: 'Minggu Ini'                            
    kebum:
        label: ''            
        prompt: 'Tambah Data'
        maxItems: '3'            
        type: repeater
        tab: 'Minggu Ini'
        form:
            fields:
                jeniskeb:
                    label: 'Kebaktian'
                    ---
                    type: dropdown
                    options: jenisKeb
                khotbah:
                    label: Pengkhotbah
                    ---
                    type: text

это модель WartaRutin (обновлена ​​решением @HardikSatsiya)

class WartaRutin extends Model
{
  use \October\Rain\Database\Traits\Validation;

  use \October\Rain\Database\Traits\SoftDelete;

  protected $dates = ['deleted_at'];
  public $rules = [    ];    
  public $table = 'mismaiti_mywarta_rutin';
  protected $jsonable = ['temakebum','rankhot','kebum','kebkom','bngmbr'];

  public function jenisKeb(){
      $jdwlibdh = WartaDataProfil::pluck('jdwlibdh');

    $jenkebOptions= [''];
    foreach($jdwlibdh as $item)  {

        // json decoding 
        $decoded = json_decode($item, true);

        print(dd($decoded));

        // manually filtering
        if($decoded['kategori'] == 'Umum/Raya') {
            $jenkebOptions[$decoded['jeniskeb']] = $decoded['jeniskeb'];      
        }
    }

    return $jenkebOptions;
}   

Решение @HardikSatasiya возвращает ошибку

Неопределенный индекс: kategori

print (dd ($ decoded)) результат

array:7 [▼
  0 => array:3 [▼
  "jeniskeb" => "Kebaktian Umum 1"
  "jamibdh" => "07.00 WIB"
  "kategori" => "Umum/Raya"
  ]
  1 => array:3 [▼
  "jeniskeb" => "Kebaktian Umum 2"
  "jamibdh" => "09.00 WIB"
  "kategori" => "Umum/Raya"
  ]
  2 => array:3 [▼
  "jeniskeb" => "Kebaktian Umum 3"
  "jamibdh" => "18.00 WIB"
  "kategori" => "Umum/Raya"
  ]
  3 => array:3 [▼
  "jeniskeb" => "Kebaktian Pemuda"
  "jamibdh" => "09.30 WIB"
  "kategori" => "Komisi/Kategorial"
  ]
  4 => array:3 [▼
  "jeniskeb" => "Kebaktian Remaja"
  "jamibdh" => "09.30 WIB"
  "kategori" => "Komisi/Kategorial"
  ]
  5 => array:3 [▼
  "jeniskeb" => "Kebaktian Tunas Remaja"
  "jamibdh" => "09.30 WIB"
  "kategori" => "Komisi/Kategorial"
  ]
  6 => array:3 [▼
  "jeniskeb" => "Kebaktian Anak"
  "jamibdh" => "09.30 WIB"
  "kategori" => "Komisi/Kategorial"
  ]
] 

person Isral Bustami    schedule 21.02.2018    source источник


Ответы (1)


Обычный подход не будет работать, поскольку ваши данные repeater, поэтому они будут JSON в базе данных.

код, который нужно поместить внутрь WartaRutin модели

public function jenisKeb(){

    $jdwlibdh = WartaDataProfil::pluck('jdwlibdh');

    $jenkebOptions= [''];
    foreach($jdwlibdh as $item)  {

        // json decoding 
        $decoded = json_decode($item, true);
        foreach($decoded as $innerItem)  {

            // manually filtering
            if($innerItem['kategori'] == 'Umum/Raya') {
                $jenkebOptions[$innerItem['jeniskeb']] = $innerItem['jeniskeb'];      
            }
        }
    }

    return $jenkebOptions;
}

это должно работать, дайте мне знать, работает это или нет.

person Hardik Satasiya    schedule 21.02.2018
comment
Я просто заметил, что вы предлагаете использовать в той же модели ... пока я пытаюсь получить доступ к этой модели из другой модели ... - person Isral Bustami; 21.02.2018
comment
Это раскрывающееся поле из разных, которое извлекает параметры из этой модели и фильтрует на основе значения поля 'kategori'. - person Isral Bustami; 21.02.2018
comment
если вы показываете форму для конкретной модели xyz, тогда вам нужно было написать dropdown в этой модели xyz, и в этой модели вы можете вызвать параметры другой модели - person Hardik Satasiya; 21.02.2018
comment
или мне не хватает чего-то, о чем вы спрашиваете, не сообщает полную информацию, сообщите модели формы, какие данные вы обновляете, и сообщите, из какой модели вы хотите получать данные, а также вам нужен зависимый раскрывающийся список или одноразовое заполнение данных только при запуске - person Hardik Satasiya; 21.02.2018
comment
fields.yaml ‹- это модель WartaDataProfil, и вы хотите, чтобы внутри нее отображалось раскрывающееся меню, какие параметры будут поступать из модели WartaRutin, хорошо? - person Hardik Satasiya; 21.02.2018
comment
Нет .. наоборот, сэр .. я хочу показать раскрывающийся список внутри модели WartaRutin, а параметры взяты из WartaDataProfil - person Isral Bustami; 21.02.2018
comment
последнее fields.yaml ‹- WartaRutin правильно - person Hardik Satasiya; 21.02.2018
comment
Нет .. это WartaDataProfil - person Isral Bustami; 21.02.2018
comment
хорошо, наконец, пеласе разместите оба fields.yaml файла с header with its respective model name (требование - показать раскрывающийся список внутри модели WartaRutin, а параметры взяты из WartaDataProfil) ... и рендеринг формы имеет WartaRutin model's fields.yaml - person Hardik Satasiya; 21.02.2018
comment
я должен попытаться .. он возвращает ошибку .. Undefined index: kategori - person Isral Bustami; 21.02.2018
comment
Я обновил свой вопрос вместе с вашим решением .. и напечатайте (dd ($ decoded)) .. для справки .. - person Isral Bustami; 21.02.2018
comment
обновленный ответ, пожалуйста, проверьте новое решение и дайте нам знать - person Hardik Satasiya; 21.02.2018