2017-02-17 34 views
0

У меня есть таблица с именем Bookings, со следующими признаками:CakePHP 3 - атрибут не отображается в таблице

  • id
  • artist_id - внешний ключ
  • status
  • amount
  • created
  • modified

Это связано с таблицами Artists, Payments и Sessions.

В представлении, я использовал плагин DataTables JQuery для отображения Bookings, которые отвечают следующим условиям:

  • Их status равно «подтвердил»
  • Попутный таблица Session's атрибут date_end должно быть больше текущую дату.

Однако при загрузке страницы атрибут amount отображается как $ 0.00, по существу нулевой, но все остальное проявляется хорошо. В переменных CakePHP атрибут amount также отображается как пустой. Но в MySQL четко указано, что amount не является пустым.

Ниже приводится выдержка из моего зрения:

<table class="bookingsTables display" id="confirmedTable"> 
    <thead> 
     <tr> 
      <th scope="col"><?= $this->Paginator->sort('name', 'Artist') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('date_start', 'Start Date') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('date_end', 'End Date') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('studio_id', 'Studio') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('engineer_id', 'Engineer') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('amount', 'Total Amount') ?></th> 
      <th scope="col"><?= $this->Paginator->sort('status', 'Payment Status') ?></th> 
      <th scope="col" class="actions"><?= __('Actions') ?></th> 
     </tr> 
    </thead> 
    <tbody> 
     <?php foreach ($bookingsConfirmed as $booking): ?> 
     <tr> 
      <td><?= $booking->has('artist') ? h($booking->artist->name) : '' ?></td> 
      <td><?= $booking->has('session') ? h($booking->session->date_start) : '' ?></td> 
      <td><?= $booking->has('session') ? h($booking->session->date_end) : '' ?></td> 
      <td><?= $booking->session->has('studio') ? h($booking->session->studio->name) : '' ?></td> 
      <td><?= $booking->session->has('engineer') ? h($booking->session->engineer->eng_firstname . ' ' . $booking->session->engineer->eng_lastname) :'' ?></td> 
      <td><?= h($this->Number->currency($booking->amount)) ?></td> 
      <td><?= h($paymentStatusLookup[$booking->id]); ?></td> 
      <td class="actions"> 
       <?= $this->Html->link(__('Update'), ['action' => 'bookingconfirm', $booking->id]) ?> 
       <?= $this->Html->link(__('View'), ['action' => 'view', $booking->id]) ?> 
       <p>Cancel</p> 
      </td> 
     </tr> 
     <?php endforeach; ?> 
    </tbody> 
</table> 

$ paymentStatusLookup [$ Бронь> идентификатор];

Вышеупомянутая строка является виртуальным статусом оплаты, хотя я не уверен, имеет ли это какое-либо отношение к тому, почему моя сумма не указана. Я удалил эту строку из своей таблицы, чтобы убедиться, что она имеет какое-либо значение (у меня есть две другие DataTables, которые показывают похожие вещи, хотя и с немного отличающимися условиями, и amount отлично отображается для этих таблиц), но это не так.

$ this-> Number-> валюта

Это просто перевернул нуль/пустое поле в $ 0,00.

В моем контроллере, соответствующая находка для этой конкретной таблицы:

$bookingsConfirmed = $this->Bookings->find('all',[ 
      'contain' => ['Sessions', 'Sessions.Studios', 'Sessions.Engineers', 'Artists'], 
      'conditions'=>['status' => 'confirmed', date_end >=' => date('Y-m-d H:i:s', Time::now()->getTimestamp())], 
      'order'=>['Bookings.created'=>'ASC'] 
     ]); 

В моем Bookings таблице, в функции validationDefault:

public function validationDefault(Validator $validator) 
    { 
     $validator 
      ->integer('id') 
      ->allowEmpty('id', 'create'); 

     $validator 
      ->requirePresence('status', 'create') 
      ->notEmpty('status'); 

     $validator 
      ->decimal('amount') 
      ->allowEmpty('amount'); 

     return $validator; 
    } 

Я сделал торт испечь в последнее время из Бронирования модели также.

Update: Ниже приведены результаты отладки в $ bookingsConfirmed:

object(Cake\ORM\Query) { 

    '(help)' =&gt; 'This is a Query object, to get the results execute or iterate it.', 
    'sql' =&gt; 'SELECT Bookings.id AS `Bookings__id`, Bookings.artist_id AS `Bookings__artist_id`, Bookings.status AS `Bookings__status`, Bookings.amount AS `Bookings__amount`, Bookings.created AS `Bookings__created`, Bookings.modified AS `Bookings__modified`, Sessions.id AS `Sessions__id`, Sessions.booking_id AS `Sessions__booking_id`, Sessions.studio_id AS `Sessions__studio_id`, Sessions.engineer_id AS `Sessions__engineer_id`, Sessions.guestengineer_id AS `Sessions__guestengineer_id`, Sessions.date_start AS `Sessions__date_start`, Sessions.date_end AS `Sessions__date_end`, Sessions.starttime AS `Sessions__starttime`, Sessions.hours AS `Sessions__hours`, Sessions.session_genre AS `Sessions__session_genre`, Sessions.no_people AS `Sessions__no_people`, Sessions.studio_usage AS `Sessions__studio_usage`, Sessions.otherpeople_req AS `Sessions__otherpeople_req`, Sessions.special_req AS `Sessions__special_req`, Sessions.created AS `Sessions__created`, Sessions.modified AS `Sessions__modified`, Studios.id AS `Studios__id`, Studios.name AS `Studios__name`, Studios.description AS `Studios__description`, Studios.created AS `Studios__created`, Studios.modified AS `Studios__modified`, Engineers.id AS `Engineers__id`, Engineers.user_id AS `Engineers__user_id`, Engineers.eng_firstname AS `Engineers__eng_firstname`, Engineers.eng_lastname AS `Engineers__eng_lastname`, Engineers.eng_email AS `Engineers__eng_email`, Engineers.eng_phoneno AS `Engineers__eng_phoneno`, Engineers.eng_status AS `Engineers__eng_status`, Engineers.rate AS `Engineers__rate`, Engineers.created AS `Engineers__created`, Engineers.modified AS `Engineers__modified`, Artists.id AS `Artists__id`, Artists.name AS `Artists__name`, Artists.cp_id AS `Artists__cp_id`, Artists.user_id AS `Artists__user_id`, Artists.genre AS `Artists__genre`, Artists.created AS `Artists__created`, Artists.modified AS `Artists__modified` FROM bookings Bookings LEFT JOIN sessions Sessions ON Bookings.id = (Sessions.booking_id) INNER JOIN studios Studios ON Studios.id = (Sessions.studio_id) LEFT JOIN engineers Engineers ON Engineers.id = (Sessions.engineer_id) INNER JOIN artists Artists ON Artists.id = (Bookings.artist_id) WHERE (status = :c0 AND Sessions.date_end &lt; :c1) ORDER BY Bookings.created ASC', 
    'params' =&gt; [ 
     ':c0' =&gt; [ 
      'value' =&gt; 'confirmed', 
      'type' =&gt; 'string', 
      'placeholder' =&gt; 'c0' 
     ], 
     ':c1' =&gt; [ 
      'value' =&gt; '20/2/17, 4:34 p02', 
      'type' =&gt; null, 
      'placeholder' =&gt; 'c1' 
     ] 
    ], 
    'defaultTypes' =&gt; [ 
     'Bookings__id' =&gt; 'integer', 
     'Bookings.id' =&gt; 'integer', 
     'id' =&gt; 'integer', 
     'Bookings__artist_id' =&gt; 'integer', 
     'Bookings.artist_id' =&gt; 'integer', 
     'artist_id' =&gt; 'integer', 
     'Bookings__status' =&gt; 'string', 
     'Bookings.status' =&gt; 'string', 
     'status' =&gt; 'string', 
     'Bookings__amount' =&gt; 'decimal', 
     'Bookings.amount' =&gt; 'decimal', 
     'amount' =&gt; 'decimal', 
     'Bookings__created' =&gt; 'datetime', 
     'Bookings.created' =&gt; 'datetime', 
     'created' =&gt; 'datetime', 
     'Bookings__modified' =&gt; 'datetime', 
     'Bookings.modified' =&gt; 'datetime', 
     'modified' =&gt; 'datetime', 
     'Sessions__id' =&gt; 'integer', 
     'Sessions.id' =&gt; 'integer', 
     'Sessions__booking_id' =&gt; 'integer', 
     'Sessions.booking_id' =&gt; 'integer', 
     'booking_id' =&gt; 'integer', 
     'Sessions__studio_id' =&gt; 'integer', 
     'Sessions.studio_id' =&gt; 'integer', 
     'studio_id' =&gt; 'integer', 
     'Sessions__engineer_id' =&gt; 'integer', 
     'Sessions.engineer_id' =&gt; 'integer', 
     'engineer_id' =&gt; 'integer', 
     'Sessions__guestengineer_id' =&gt; 'integer', 
     'Sessions.guestengineer_id' =&gt; 'integer', 
     'guestengineer_id' =&gt; 'integer', 
     'Sessions__date_start' =&gt; 'date', 
     'Sessions.date_start' =&gt; 'date', 
     'date_start' =&gt; 'date', 
     'Sessions__date_end' =&gt; 'date', 
     'Sessions.date_end' =&gt; 'date', 
     'date_end' =&gt; 'date', 
     'Sessions__starttime' =&gt; 'time', 
     'Sessions.starttime' =&gt; 'time', 
     'starttime' =&gt; 'time', 
     'Sessions__hours' =&gt; 'integer', 
     'Sessions.hours' =&gt; 'integer', 
     'hours' =&gt; 'integer', 
     'Sessions__session_genre' =&gt; 'text', 
     'Sessions.session_genre' =&gt; 'text', 
     'session_genre' =&gt; 'text', 
     'Sessions__no_people' =&gt; 'integer', 
     'Sessions.no_people' =&gt; 'integer', 
     'no_people' =&gt; 'integer', 
     'Sessions__studio_usage' =&gt; 'text', 
     'Sessions.studio_usage' =&gt; 'text', 
     'studio_usage' =&gt; 'text', 
     'Sessions__otherpeople_req' =&gt; 'text', 
     'Sessions.otherpeople_req' =&gt; 'text', 
     'otherpeople_req' =&gt; 'text', 
     'Sessions__special_req' =&gt; 'text', 
     'Sessions.special_req' =&gt; 'text', 
     'special_req' =&gt; 'text', 
     'Sessions__created' =&gt; 'datetime', 
     'Sessions.created' =&gt; 'datetime', 
     'Sessions__modified' =&gt; 'datetime', 
     'Sessions.modified' =&gt; 'datetime', 
     'Studios__id' =&gt; 'integer', 
     'Studios.id' =&gt; 'integer', 
     'Studios__name' =&gt; 'string', 
     'Studios.name' =&gt; 'string', 
     'name' =&gt; 'string', 
     'Studios__description' =&gt; 'text', 
     'Studios.description' =&gt; 'text', 
     'description' =&gt; 'text', 
     'Studios__created' =&gt; 'datetime', 
     'Studios.created' =&gt; 'datetime', 
     'Studios__modified' =&gt; 'datetime', 
     'Studios.modified' =&gt; 'datetime', 
     'Engineers__id' =&gt; 'integer', 
     'Engineers.id' =&gt; 'integer', 
     'Engineers__user_id' =&gt; 'integer', 
     'Engineers.user_id' =&gt; 'integer', 
     'user_id' =&gt; 'integer', 
     'Engineers__eng_firstname' =&gt; 'string', 
     'Engineers.eng_firstname' =&gt; 'string', 
     'eng_firstname' =&gt; 'string', 
     'Engineers__eng_lastname' =&gt; 'string', 
     'Engineers.eng_lastname' =&gt; 'string', 
     'eng_lastname' =&gt; 'string', 
     'Engineers__eng_email' =&gt; 'string', 
     'Engineers.eng_email' =&gt; 'string', 
     'eng_email' =&gt; 'string', 
     'Engineers__eng_phoneno' =&gt; 'integer', 
     'Engineers.eng_phoneno' =&gt; 'integer', 
     'eng_phoneno' =&gt; 'integer', 
     'Engineers__eng_status' =&gt; 'string', 
     'Engineers.eng_status' =&gt; 'string', 
     'eng_status' =&gt; 'string', 
     'Engineers__rate' =&gt; 'decimal', 
     'Engineers.rate' =&gt; 'decimal', 
     'rate' =&gt; 'decimal', 
     'Engineers__created' =&gt; 'datetime', 
     'Engineers.created' =&gt; 'datetime', 
     'Engineers__modified' =&gt; 'datetime', 
     'Engineers.modified' =&gt; 'datetime', 
     'Artists__id' =&gt; 'integer', 
     'Artists.id' =&gt; 'integer', 
     'Artists__name' =&gt; 'string', 
     'Artists.name' =&gt; 'string', 
     'Artists__cp_id' =&gt; 'integer', 
     'Artists.cp_id' =&gt; 'integer', 
     'cp_id' =&gt; 'integer', 
     'Artists__user_id' =&gt; 'integer', 
     'Artists.user_id' =&gt; 'integer', 
     'Artists__genre' =&gt; 'text', 
     'Artists.genre' =&gt; 'text', 
     'genre' =&gt; 'text', 
     'Artists__created' =&gt; 'datetime', 
     'Artists.created' =&gt; 'datetime', 
     'Artists__modified' =&gt; 'datetime', 
     'Artists.modified' =&gt; 'datetime' 
    ], 
    'decorators' =&gt; (int) 0, 
    'executed' =&gt; false, 
    'hydrate' =&gt; true, 
    'buffered' =&gt; true, 
    'formatters' =&gt; (int) 0, 
    'mapReducers' =&gt; (int) 0, 
    'contain' =&gt; [ 
     'Sessions' =&gt; [ 
      'Studios' =&gt; [], 
      'Engineers' =&gt; [] 
     ], 
     'Artists' =&gt; [] 
    ], 
    'matching' =&gt; [], 
    'extraOptions' =&gt; [], 
    'repository' =&gt; object(App\Model\Table\BookingsTable) { 

     'registryAlias' =&gt; 'Bookings', 
     'table' =&gt; 'bookings', 
     'alias' =&gt; 'Bookings', 
     'entityClass' =&gt; 'App\Model\Entity\Booking', 
     'associations' =&gt; [ 
      (int) 0 =&gt; 'artists', 
      (int) 1 =&gt; 'payments', 
      (int) 2 =&gt; 'sessions' 
     ], 
     'behaviors' =&gt; [ 
      (int) 0 =&gt; 'Timestamp' 
     ], 
     'defaultConnection' =&gt; 'default', 
     'connectionName' =&gt; 'default' 

    } 

} 

Update: отлаживать ($ бронирования) следующим образом, используя 1 запись:

object(App\Model\Entity\Booking) { 

    'id' => (int) 133, 
    'artist_id' => (int) 6, 
    'status' => 'confirmed', 
    'amount' => '', 
    'created' => object(Cake\I18n\FrozenTime) { 

     'time' => '2017-02-20T16:27:15+00:00', 
     'timezone' => 'UTC', 
     'fixedNowTime' => false 

    }, 
    'modified' => object(Cake\I18n\FrozenTime) { 

     'time' => '2017-02-20T16:32:08+00:00', 
     'timezone' => 'UTC', 
     'fixedNowTime' => false 

    }, 
    'artist' => object(App\Model\Entity\Artist) { 

     'id' => (int) 6, 
     'name' => 'test1', 
     'cp_id' => (int) 6, 
     'user_id' => (int) 25, 
     'genre' => 'Anything really.', 
     'created' => object(Cake\I18n\FrozenTime) { 

      'time' => '2017-01-30T08:57:41+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'modified' => object(Cake\I18n\FrozenTime) { 

      'time' => '2017-01-30T08:57:41+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [], 
     '[original]' => [], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'Artists' 

    }, 
    'session' => object(App\Model\Entity\Session) { 

     'id' => (int) 100, 
     'booking_id' => (int) 133, 
     'studio_id' => (int) 2, 
     'engineer_id' => (int) 2, 
     'guestengineer_id' => null, 
     'date_start' => object(Cake\I18n\FrozenDate) { 

      'time' => '2017-02-28T00:00:00+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'date_end' => object(Cake\I18n\FrozenDate) { 

      'time' => '2017-03-14T00:00:00+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'starttime' => null, 
     'hours' => null, 
     'session_genre' => 'tests', 
     'no_people' => (int) 5, 
     'studio_usage' => 'tests', 
     'otherpeople_req' => '', 
     'special_req' => '', 
     'created' => object(Cake\I18n\FrozenTime) { 

      'time' => '2017-02-20T16:27:15+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'modified' => object(Cake\I18n\FrozenTime) { 

      'time' => '2017-02-20T16:32:08+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'engineer' => object(App\Model\Entity\Engineer) { 

      'id' => (int) 2, 
      'user_id' => (int) 18, 
      'eng_firstname' => 'test', 
      'eng_lastname' => 'test', 
      'eng_email' => '[email protected]', 
      'eng_phoneno' => (int) 256, 
      'eng_status' => 'staff', 
      'rate' => (float) 51, 
      'created' => object(Cake\I18n\FrozenTime) { 

       'time' => '2016-10-11T09:27:09+00:00', 
       'timezone' => 'UTC', 
       'fixedNowTime' => false 

      }, 
      'modified' => object(Cake\I18n\FrozenTime) { 

       'time' => '2016-10-11T09:27:09+00:00', 
       'timezone' => 'UTC', 
       'fixedNowTime' => false 

      }, 
      '[new]' => false, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'Engineers' 

     }, 
     'studio' => object(App\Model\Entity\Studio) { 

      'id' => (int) 2, 
      'name' => 'Studio B', 
      'description' => 'Studio B', 
      'created' => object(Cake\I18n\FrozenTime) { 

       'time' => '2016-10-11T00:04:28+00:00', 
       'timezone' => 'UTC', 
       'fixedNowTime' => false 

      }, 
      'modified' => object(Cake\I18n\FrozenTime) { 

       'time' => '2016-10-11T00:04:28+00:00', 
       'timezone' => 'UTC', 
       'fixedNowTime' => false 

      }, 
      '[new]' => false, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'Studios' 

     }, 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [], 
     '[original]' => [], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'Sessions' 

    }, 
    '[new]' => false, 
    '[accessible]' => [ 
     '*' => true 
    ], 
    '[dirty]' => [ 
     'amount' => true 
    ], 
    '[original]' => [ 
     'amount' => (float) 726.95 
    ], 
    '[virtual]' => [], 
    '[errors]' => [], 
    '[invalid]' => [], 
    '[repository]' => 'Bookings' 

} 
+0

попробуйте отладить одну из ваших записей о бронировании (т.е. 'debug ($ booking)') и опубликуйте результат здесь – arilia

+0

Я попробовал отладить ($ booking), но это ничего мне не дало, возможно, потому, что у меня нет этой переменной в моем контроллере. Отладка $ bookingsConfirmed дала вход, который я добавил в OP. Bookings.amount отображается с использованием десятичного типа. – mistaq

+0

у вас есть эта переменная внутри цикла foreach. – arilia

ответ

0

Я нашел решение к проблеме. В классе моего виртуального статуса у меня были операторы If =, которые использовали присвоение значения ($ booking-> payment = ''), а не условие сравнения ($ booking-> payment == ''), которые устанавливают значение 0 и поэтому отображается как сумма 0, несмотря на то, что исходная сумма не равна 0.

 Смежные вопросы

  • Нет связанных вопросов^_^