Как использовать одну и ту же таблицу дважды со списком поиска, но с разными displayFields в cakePHP 3.x

У меня есть CountryTable, где я могу найти, среди прочего, поля «имя» и «валюта».

В настоящее время у меня есть следующие определения таблиц:

class ProducsTable extends Table {

    public function initialize(array $config) {
        $this->table('products');
        $this->displayField('name');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');

        $this->hasMany('Productprices', [
            'foreignKey' => 'product_id',
        ]);

        $this->belongsTo('Countries', [
            'foreignKey' => 'country_id',
        ]);

    }
}

class ProductpricesTable extends Table {

    public function initialize(array $config) {
        $this->table('productprices');
        $this->displayField('name');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');

        $this->belongsTo('Products', [
            'foreignKey' => 'product_id',
        ]);

    }
}

class CountryTable расширяет таблицу {

    public function initialize(array $config) {
        $this->table('countries');
        $this->displayField('name');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');

        $this->hasMany('Products', [
            'foreignKey' => 'product_id',
        ]);

        $this->hasMany('Productprices', [
            'foreignKey' => 'product_id',
        ]);

    }
}

Итак, у меня есть продукт, в котором указана страна происхождения и список цен, связанных с валютой.

Когда я создаю продукт, у меня есть следующая форма:

<?= $this->Form->input('name', ['label' => __("Name :")]); ?>

<?= $this->Form->input('country_id', ['label' => __("Origin :")]); ?>

<?= $this->Form->input('pricelist.0.value', ['label' => __("Price :")]); ?>

<?= $this->Form->input('pricelist.0.country_id', ['label' => __("Currency :")]); ?>

Конечно, оба input('country_id') отображают список имен, тогда как я бы хотел, чтобы второй отображал список валют.

Как сделать?

В основном я хотел создать копию CountryTable с именем CurrenciesTable, указывающую на ту же таблицу «страны», и связать Productprices с CurrenciesTable... но звучит странно... нет?


person fralbo    schedule 14.01.2015    source источник


Ответы (1)


Если вы хотите создать раскрывающийся список, вы должны установить его тип на select.

<?= $this->Form->input('country_id', ['type' => 'select, 'label' => __("Origin :")]); ?>

Чтобы добавить к нему параметры, используйте:

<?= $this->Form->input('country_id', ['type' => 'select, 'options' => $list, 'label' => __("Origin :")]); ?>

$list должен быть массивом. Это можно вызвать из модели с помощью: $this->Model->find('list');. Используйте этот код в своем контроллере. Думаю, ты знаешь, как это делать.

Удачи!

person Bob    schedule 15.01.2015
comment
Точно Боб, вот как. Большое спасибо. - person fralbo; 17.01.2015
comment
@caBBAlainB отлично! Удачи :) - person Bob; 17.01.2015