cakephp, получающий данные из другой модели

#cakephp

#cakephp

Вопрос:

Я новичок в cakephp, и у меня проблема с созданием моего приложения. В моем приложении у меня есть модели, называемые Customer, Job, Jobtask, Jobtasksvehicle и Vehicle. Их связь с базой данных — Customer-> Job-> Jobtask-> Jobtasksvehicle-> Транспортное средство. У меня есть страница с именем job sheet, на этом листе я должен отобразить имя клиента, идентификатор задания, задание и название транспортного средства. Я могу получить имя клиента, идентификатор задания и отображение задания, но я не могу понять, как отобразить там название транспортного средства. Кто-нибудь может мне помочь.

Это модель для страницы

     function sch($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid job', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->set('job', $this->Job->read(null, $id));
  

Я хочу отобразить название транспортного средства в этой таблице

 <div class="related">

<?php
    $i = 0;
    foreach ($job['Jobtask'] as $jobtask):
        $class = null;
        if ($i   % 2 == 0) {
            $class = ' class="altrow"';
        }
    ?>
    <tr<?php echo $class;?>>
        <td><?php echo $jobtask['id'];?></td>
        <td><?php echo $jobtask['job_id'];?></td>
        <td><?php echo $jobtask['rate_id'];?></td>
        <td><?php echo $jobtask['type'];?></td>
        <td><?php echo $jobtask['date'];?></td>
        <td><?php echo $jobtask['starttime'];?></td>
        <td><?php echo $jobtask['timeband'];?></td>
        <td><?php echo $jobtask['settlement'];?></td>       
        <td><?php echo $job['Jobtasksvehicle']['vehicle_id'];?></td>    

        <td class="actions">



            <?php echo $this->Html->link(__('Allocate Vehicle', true), array('controller' => 'jobtasksvehicles','action' => 'add', $jobtask['id'])); ?>
            <?php echo $this->Html->link(__('View', true), array('controller' => 'jobtasks', 'action' => 'view', $jobtask['id'])); ?>
            <?php echo $this->Html->link(__('Edit', true), array('controller' => 'jobtasks', 'action' => 'edit', $jobtask['id'])); ?>
            <?php echo $this->Html->link(__('Delete', true), array('controller' => 'jobtasks', 'action' => 'delete', $jobtask['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $jobtask['id'])); ?>
        </td>
    </tr>
<?php endforeach; ?>
</table>
  

Это взаимосвязь между моделями

У клиента много заданий

Задание принадлежит клиенту

Задание имеет множество заданий

Jobtask принадлежит заданию

Jobtask имеет множество Jobtasksvehicle

Jobtasksvehicle принадлежит Jobtask и транспортному средству

Транспортное средство имеет множество рабочих Задачvehicle

Комментарии:

1. опубликуйте ваши точные отношения ($hasMany, $belongsTo …). И это не очень хороший подход, поскольку вы будете возвращать потенциально огромные объемы данных. Вам следует обратить внимание на сдерживаемое поведение как на лучший вариант, выбирая только то, что вам нужно.

2. Я отредактировал взаимосвязь между моделями.

Ответ №1:

Использование сдерживаемого поведения, о котором упоминает Росс, является наилучшим подходом. Добавьте в свою модель задания:

 var $actsAs = array('Containable');
  

И в вашем контроллере:

 $job = $this->Job->find('first', array(
    'conditions' => array('Job.id' => $id),
    'contain' => array(
        'Jobtask' => array(
            'Jobtasksvehicle' => array(
                'Vehicle'
             ),
         ),
    ),
));
$this->set(compact('job'));
  

Дополнительную справку см. в документации. Я оставлю на ваше усмотрение обработку данных в представлении.

Комментарии:

1. Я сделал так, как написал, у меня есть задание, рабочие задачи, отображение сведений о клиенте, но я не могу отобразить сведения о транспортном средстве. Я попытался, как это, и он не работает <td> <?php echo $this->HTML-код->ссылка($задание[‘автомобиль’][‘vehiclemodel’], массив(‘контроллер’ => ‘м’, ‘действие’ => ‘вид’, $задание[‘автомобиль’][‘vehiclemodel’])); ?> </td>