我有一个名为Bookings
的表,其中包含以下属性:
id
artist_id
- 外键status
amount
created
modified
它与表格Artists
,Payments
和Sessions
相关联。
在View中,我使用了jQuery插件DataTables来显示满足以下条件的Bookings
:
status
等于'已确认'Session's
属性date_end必须大于当前日期。但是,在加载页面时,amount
属性显示为$ 0.00,基本上为null,但其他所有内容都显示正常。在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 [$ booking-&GT; ID];
以上行是付款的虚拟状态,但我不确定这是否与我的金额值缺失有关。我从我的表中删除了这一行,看看它是否有任何区别(我有两个显示相似内容的其他DataTables,虽然条件略有不同,amount
显示这些表格正常),但事实并非如此。
$这 - &GT;&号 - GT;货币
这只是将null / empty字段变为$ 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']
]);
在我的预订表中,在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;
}
我最近还在预订模式中做了一个Cake烘焙。
更新:以下是$ bookingsConfirmed:
的调试结果object(Cake\ORM\Query) {
'(help)' => 'This is a Query object, to get the results execute or iterate it.',
'sql' => '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 < :c1) ORDER BY Bookings.created ASC',
'params' => [
':c0' => [
'value' => 'confirmed',
'type' => 'string',
'placeholder' => 'c0'
],
':c1' => [
'value' => '20/2/17, 4:34 p02',
'type' => null,
'placeholder' => 'c1'
]
],
'defaultTypes' => [
'Bookings__id' => 'integer',
'Bookings.id' => 'integer',
'id' => 'integer',
'Bookings__artist_id' => 'integer',
'Bookings.artist_id' => 'integer',
'artist_id' => 'integer',
'Bookings__status' => 'string',
'Bookings.status' => 'string',
'status' => 'string',
'Bookings__amount' => 'decimal',
'Bookings.amount' => 'decimal',
'amount' => 'decimal',
'Bookings__created' => 'datetime',
'Bookings.created' => 'datetime',
'created' => 'datetime',
'Bookings__modified' => 'datetime',
'Bookings.modified' => 'datetime',
'modified' => 'datetime',
'Sessions__id' => 'integer',
'Sessions.id' => 'integer',
'Sessions__booking_id' => 'integer',
'Sessions.booking_id' => 'integer',
'booking_id' => 'integer',
'Sessions__studio_id' => 'integer',
'Sessions.studio_id' => 'integer',
'studio_id' => 'integer',
'Sessions__engineer_id' => 'integer',
'Sessions.engineer_id' => 'integer',
'engineer_id' => 'integer',
'Sessions__guestengineer_id' => 'integer',
'Sessions.guestengineer_id' => 'integer',
'guestengineer_id' => 'integer',
'Sessions__date_start' => 'date',
'Sessions.date_start' => 'date',
'date_start' => 'date',
'Sessions__date_end' => 'date',
'Sessions.date_end' => 'date',
'date_end' => 'date',
'Sessions__starttime' => 'time',
'Sessions.starttime' => 'time',
'starttime' => 'time',
'Sessions__hours' => 'integer',
'Sessions.hours' => 'integer',
'hours' => 'integer',
'Sessions__session_genre' => 'text',
'Sessions.session_genre' => 'text',
'session_genre' => 'text',
'Sessions__no_people' => 'integer',
'Sessions.no_people' => 'integer',
'no_people' => 'integer',
'Sessions__studio_usage' => 'text',
'Sessions.studio_usage' => 'text',
'studio_usage' => 'text',
'Sessions__otherpeople_req' => 'text',
'Sessions.otherpeople_req' => 'text',
'otherpeople_req' => 'text',
'Sessions__special_req' => 'text',
'Sessions.special_req' => 'text',
'special_req' => 'text',
'Sessions__created' => 'datetime',
'Sessions.created' => 'datetime',
'Sessions__modified' => 'datetime',
'Sessions.modified' => 'datetime',
'Studios__id' => 'integer',
'Studios.id' => 'integer',
'Studios__name' => 'string',
'Studios.name' => 'string',
'name' => 'string',
'Studios__description' => 'text',
'Studios.description' => 'text',
'description' => 'text',
'Studios__created' => 'datetime',
'Studios.created' => 'datetime',
'Studios__modified' => 'datetime',
'Studios.modified' => 'datetime',
'Engineers__id' => 'integer',
'Engineers.id' => 'integer',
'Engineers__user_id' => 'integer',
'Engineers.user_id' => 'integer',
'user_id' => 'integer',
'Engineers__eng_firstname' => 'string',
'Engineers.eng_firstname' => 'string',
'eng_firstname' => 'string',
'Engineers__eng_lastname' => 'string',
'Engineers.eng_lastname' => 'string',
'eng_lastname' => 'string',
'Engineers__eng_email' => 'string',
'Engineers.eng_email' => 'string',
'eng_email' => 'string',
'Engineers__eng_phoneno' => 'integer',
'Engineers.eng_phoneno' => 'integer',
'eng_phoneno' => 'integer',
'Engineers__eng_status' => 'string',
'Engineers.eng_status' => 'string',
'eng_status' => 'string',
'Engineers__rate' => 'decimal',
'Engineers.rate' => 'decimal',
'rate' => 'decimal',
'Engineers__created' => 'datetime',
'Engineers.created' => 'datetime',
'Engineers__modified' => 'datetime',
'Engineers.modified' => 'datetime',
'Artists__id' => 'integer',
'Artists.id' => 'integer',
'Artists__name' => 'string',
'Artists.name' => 'string',
'Artists__cp_id' => 'integer',
'Artists.cp_id' => 'integer',
'cp_id' => 'integer',
'Artists__user_id' => 'integer',
'Artists.user_id' => 'integer',
'Artists__genre' => 'text',
'Artists.genre' => 'text',
'genre' => 'text',
'Artists__created' => 'datetime',
'Artists.created' => 'datetime',
'Artists__modified' => 'datetime',
'Artists.modified' => 'datetime'
],
'decorators' => (int) 0,
'executed' => false,
'hydrate' => true,
'buffered' => true,
'formatters' => (int) 0,
'mapReducers' => (int) 0,
'contain' => [
'Sessions' => [
'Studios' => [],
'Engineers' => []
],
'Artists' => []
],
'matching' => [],
'extraOptions' => [],
'repository' => object(App\Model\Table\BookingsTable) {
'registryAlias' => 'Bookings',
'table' => 'bookings',
'alias' => 'Bookings',
'entityClass' => 'App\Model\Entity\Booking',
'associations' => [
(int) 0 => 'artists',
(int) 1 => 'payments',
(int) 2 => 'sessions'
],
'behaviors' => [
(int) 0 => 'Timestamp'
],
'defaultConnection' => 'default',
'connectionName' => 'default'
}
}
更新:debug($ booking)如下,使用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' => 'test3@email.com',
'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 :(得分:0)
我找到了问题的解决方案。在我的虚拟状态课程中,我有一个If语句=使用了值的分配($ booking-&gt; payment =&#39;&#39;)而不是比较条件($ booking-&gt;付款==&#39;&#39;),将值设置为0,因此显示为0金额,尽管原始金额不是0。