Octobercms детские отношения отношений - PullRequest
0 голосов
/ 07 июня 2018

Я работаю в плагине octobercms, и у меня есть следующие модели:

  • Дома
  • Платит
  • Владельцы

В модели домов у меня есть следующие отношения:

public $hasManyThrough = [
      'owner' => [
        'Author\Plugin\Models\Owner',
        'table' => 'author_plugin_houses_owners',
        'key' => 'houses_id',
        'otherKey' => 'owners_id'
      ]
    ];

это отношение имеет промежуточную таблицу author_plugin_houses_owners:

+------------+-------------+--------+
| hoses_id   |  owners_id  | active |
+------------+-------------+--------+

А в модели Pays у меня следующие отношения:

public $belongsTo = [
        'houses' => ['Author\Plugin\Models\Houses']
];

эта модель соответствует следующей таблице:

+----+----------+---------+-------+------+
| id | hoses_id | amounth | payed | debt |
+----+----------+---------+-------+------+

в таблице у меня есть столбец "Houses_id", вопрос в том, как я могу получить доступ к объявленным отношениям "владелец"в модели "Дома", так как модель "Платит"?мне нужен доступ к нему, потому что мне нужно печатать "имя_хозяина" в виде списка в бэкенде плагина.

таблица владельца:

+----+------------+--------+
| id | owner_name | active |
+----+------------+--------+

спасибо большое!

1 Ответ

0 голосов
/ 07 июня 2018

Я предполагаю, что Pay принадлежит только одному дому.

public $belongsTo = [        
    'house' => ['Author\Plugin\Models\Houses'] 
  // ^ you can use house instead houses for relation name
];

Теперь мы можем получить доступ к владельцу с помощью цепочки отношений

$payModel->house->owner 

Поскольку you made relation hasMany один дом может иметь несколькоowners [ hasManyThrough ]

, поэтому вам будет возвращен список owners.

Как и в list view, вам нужно его использовать. Вы можете определитьpartial тип столбца

columns:
    id:
        label: id
        type: number
        searchable: true
        sortable: true

    .... other fields ...

    owner_name:
        label: Owner
        type: partial
        path: $/hardiksatasiya/demotest/models/sort/_ownername_column.htm

Обязательно замените путь на имя и путь вашего автора плагина.

Теперь внутри части вы можете написать свой фактическийлогика [это должно быть в PHP, а не в веточке]

<?php
// this is hasmany relation so we expect multiple owners
$owners = $record->house->owner;
$ownerArr = [];
foreach($owners as $ownr) {
    $ownerArr[] = $ownr->owner_name;
}
$output = implode($ownerArr, ', ');
?>

<?php echo $output ?>

Если есть только один владелец, он покажет Hardik одно имя, только если есть несколько владельцев, он покажет Hardik, Noe запятуюразделенные значения.

enter image description here

если есть сомнения, пожалуйста, прокомментируйте.

...