Cakephp 3.6: несколько внешних ключей между двумя таблицами

Я новый разработчик в CakePHP и PHP.

У меня есть 2 таблицы: Tasks а также Users,

Среди других Tasks эти внешние ключи связаны с Users Таблица: Assigned_from, Assigned_to, Created_by,

Так в UsersTable.php Я вставил эти строки:


Функция инициализации:

$this->hasMany('TasksTo', [
'foreignKey' => 'assigned_to',
'className' => 'Tasks'
]);
$this->hasMany('TasksFrom', [
'foreignKey' => 'assigned_From',
'className' => 'Tasks'
]);
$this->hasMany('TasksBy', [
'foreignKey' => 'created_by',
'className' => 'Tasks'
]);

Функция buildrules:

$rules->add($rules->existsIn(['assigned_to'], 'TasksTo'));
$rules->add($rules->existsIn(['assigned_from'], 'TasksFrom'));
$rules->add($rules->existsIn(['created_by'], 'TasksBy'));

Соответственно в TasksTable.php :
Функция инициализации:

$this->belongsTo('UsersTo', [
'foreignKey' => 'assigned_to',
'className' => 'Users'
]);
$this->belongsTo('UsersFrom', [
'foreignKey' => 'assigned_from',
'className' => 'Users'
]);
$this->belongsTo('UsersBy', [
'foreignKey' => 'created_by',
'className' => 'Users'
]);

Функция buildrules:

$rules->add($rules->existsIn(['assigned_to'], 'UsersTo'));
$rules->add($rules->existsIn(['created_by'], 'UsersBy'));
$rules->add($rules->existsIn(['assigned_from'], 'UsersFrom'));

Таким образом, чтобы показать эту информацию в представлении пользователя, я добавил эти строки в UsersController.php :

public function view($id = null)
{
$user = $this->Users->get($id,[
'contain' => ['TasksTo', 'TasksFrom', 'TasksBy']
]);
$this->set('user', $user);
}

Как я могу изменить view.ctp для того, чтобы отобразить всю эту информацию?

Вот текущий код:

<div class="related">
<h4><?= __('Related Tasks') ?></h4>
<?php if (!empty($user->tasks)): ?>
<table cellpadding="0" cellspacing="0">
<tr>
<th scope="col"><?= __('Priority') ?></th>
<th scope="col"><?= __('Name') ?></th>
<th scope="col"><?= __('Instructions') ?></th>
<th scope="col"><?= __('Date_start') ?></th>
<th scope="col"><?= __('Date_end') ?></th>
<th scope="col"><?= __('Total_minutes') ?></th>
<th scope="col"><?= __('Assigned_from') ?></th>
<th scope="col"><?= __('Customer_id') ?></th>
<th scope="col"><?= __('Progress') ?></th>
<th scope="col"><?= __('Shared_folder_path') ?></th>
<th scope="col" class="actions"><?= __('Actions') ?></th>
</tr>
<?php foreach ($user->tasks as $tasks): ?>
<tr>
<td><?= h($tasks->priority) ?></td>
<td><?= h($tasks->name) ?></td>
<td><?= h($tasks->instructions) ?></td>
<td><?= h($tasks->date_start) ?></td>
<td><?= h($tasks->date_end) ?></td>
<td><?= h($tasks->total_minutes) ?></td>
<td><?= h($tasks->assigned_from) ?></td>
<td><?= h($tasks->customer_id) ?></td>
<td><?= h($tasks->progress) ?></td>
<td><?= h($tasks->shared_folder_path) ?></td>
<td class="actions">
<?= $this->Html->link(__('View'), ['controller' => 'Tasks', 'action' => 'view', $tasks->id]) ?>
<?= $this->Html->link(__('Edit'), ['controller' => 'Tasks', 'action' => 'edit', $tasks->id]) ?>
<?= $this->Form->postLink(__('Delete'), ['controller' => 'Tasks', 'action' => 'delete', $tasks->id], ['confirm' => __('Are you sure you want to delete # {0}?', $tasks->id)]) ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
</div>

0

Решение

Ваш hasMany ассоциации будут доступны в виде строчной и подчеркнутой версии названия ассоциации:

$user->tasks_to   //TaskTo association
$user->tasks_from //TasksFrom association
$user->tasks_by   //TasksBy association

Таким образом, чтобы отобразить эти данные в вашем представлении, вам нужно зациклить каждую из этих ассоциаций отдельно, например:

<?php foreach($user->tasks_to as $task): ?>
<td><?= h($task->priority) ?></td>
<td><?= h($task->name) ?></td>
<td><?= h($task->instructions) ?></td>
<td><?= h($task->date_start) ?></td>
<td><?= h($task->date_end) ?></td>
<!-- and so on... -->
<?php endforeach; ?>

Более подробную информацию можно найти в документации CakePHP:

CakePHP 3 Соглашения

CakePHP 3 Ассоциации

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector