0

我使用Builder插件创建了两个插件( StatesSuburbs),到目前为止效果很好。

问题是,在States插件中,我只是允许添加州名,而在 Suburbs 插件中,我允许用户先选择 State,然后输入郊区名称。到目前为止,这两个插件都可以正常工作。

现在的问题是,我有第三个插件,称为Properties,其中我有这两个下拉列表StateSuburb,但到目前为止,All States 和 All Suburbs 都在显示。但我希望用户选择第一个,然后根据州选择,它应该将所有郊区都放到我的另一个郊区下拉列表中。

我曾尝试使用Builder 插件提供的dependsOn,但我只是无法理解根据我目前的情况逐步实现它的流程。下面是我到目前为止所做和尝试的代码。

插件\technobrave\properties\models\Property.php

<?php namespace Technobrave\Properties\Models;

    use Model;
    use technobrave\states\Models\State as State;
    use technobrave\suburbs\Models\Suburb as Suburb;

    public function getStateIdOptions()
        {
            // getting all states 

           $get_all_states = State::all();


           $fields[''] = 'Select any State';
           foreach ($get_all_states as $current_state) {
                $fields[$current_state->attributes['id']] = $current_state->attributes['state_name'];

           }
          ksort($fields);  
          return $fields;
        }    



        public function getSuburbIdOptions($stateId)
        {
            // getting all suburbs 

            $get_all_suburbs = Suburb::all();

            $fields[''] = 'Select any Suburb';
            foreach ($get_all_suburbs as $current_suburb) {
                $fields[$current_suburb->attributes['id']] = $current_suburb->attributes['suburb'];

            }       


          ksort($fields);  
          return $fields;
        }
    }

从这里开始我该怎么做?任何帮助或指导都将受到高度赞赏和有用。

谢谢

4

1 回答 1

0

好,朋友们,

最终我想出了一个解决方案。这是我所做的。

fields.yaml文件: technobrave\properties\models\property\fields.yaml

        state_id:
            label: 'State:'
            span: auto
            required: 1
            type: dropdown
            tab: 'Address Information'
        suburb_id:
            label: 'Suburb:'
            span: auto
            required: 1
            type: dropdown
            tab: 'Address Information'
            placeholder: 'Select any Suburb'
            dependsOn: state_id

正如你在上面看到的,

suburb_id我添加的下面两行代码。

placeholder: 'Select any Suburb'
dependsOn: state_id

属性模型文件:technobrave\properties\models\Property.php

use Model;
use technobrave\states\Models\State as State;
use technobrave\suburbs\Models\Suburb as Suburb;

public function getStateIdOptions()
    {
        // getting all states 

       $get_all_states = State::all();


       $fields[''] = 'Select any State';
       foreach ($get_all_states as $current_state) {
            $fields[$current_state->attributes['id']] = $current_state->attributes['state_name'];

       }
      ksort($fields);  
      return $fields;
    }    



public function getSuburbIdOptions()
{
    return Suburb::getNameList($this->state_id);
}

在上面,我刚刚使用以下代码更新了 getSuburbIdOptions方法并删除了我的旧代码。

return Suburb::getNameList($this->state_id);

然后我去了我的郊区插件。

郊区模型文件:technobrave\suburbs\models\Suburb.php

在这个模型文件中,我确保使用belongsTo并添加了getNameList方法,如下所示。

 <?php namespace Technobrave\Suburbs\Models;

    use Model;
    use technobrave\states\Models\State as State;
    /**
     * Model
     */
    class Suburb extends Model
    {

        /**
         * @var string The database table used by the model.
         */
        public $table = 'youtable_here_';


        public $belongsTo = ['State' => [
                                                      'technobrave\states\Models\State',
                                                      'key' => 'state'
                                                  ],

                            ];


        /**
         * @var array Cache for nameList() method
         */
        protected static $nameList = [];

        public static function getNameList($stateId)
        {
            if (isset(self::$nameList[$stateId])) {
                return self::$nameList[$stateId];
            }

            return self::$nameList[$stateId] = self::wherestate($stateId)->lists('suburb', 'id');
        }

    }

它有效。

希望它对那些坚持相同问题/实施的人有所帮助。

谢谢

于 2017-05-03T08:56:20.267 回答