내 cakephp 시스템의 관점에서 테이블의 결과 데이터를 정렬하는 데 문제가 있습니다. 나는 테이블의 모든 결과 데이터를 보여줄 수는 있지만 그것을 정렬 할 수는 없다.관련 테이블 데이터 정렬
나는 방향 링크 오름차순과 내림차순으로 정렬하기 위해 페이지 링크 링크를 만들 수 있었지만 URL 링크와 화살표 그림이 방향, 오름차순 및 내림차순을 변경 했음에도 불구하고 클릭하면 순서가 그대로 유지됩니다.
- 디스크 hasMany의 오디오
- 오디오 belongsTo를 디스크, 오디오, hasMany의 순간
- 순간 belongsTo를 오디오
내 PHP 모델은 다음과 같습니다 내 시스템에서
I은 다음과 관련된 세 개의 테이블을 가지고 다음과 같이 보입니다.
Disc.php :
class Disc extends AppModel {
public $name = 'Disc';
public $hasMany = array(
'Audio' => array(
'className' => 'Audio',
'foreignKey' => 'Disc_id',
'order' => 'Audio.id DESC'
)
);
Audio.php :
class Audio extends AppModel {
public $name = 'Audio';
public $belongsTo = array(
'Disc' => array(
'className' => 'Disc',
'foreignKey' => 'Disc_id'
)
);
public $hasMany = array(
'Moment' => array(
'className' => 'Moment',
'foreignKey' => 'audio_id'
)
);
Moment.php :
DiscsController :
class DiscsController extends AppController {
...
public function view($id = null) {
$this->Disc->recursive = 2; # or -1, 0, 1, 2, 3
$this->Disc->id = $id;
$this->set('disc', $this->Disc->read());
//$this->set('audio', $this->paginate());
$conditions = array("Audio.disc_id" => "$id");
$this->set('audio', $this->paginate('Audio', $conditions));
// note "plan" in the first argument of set (this is required to pass the results back to the view). Also.
//The $condition is set to return ONLY plans that match the plan_detail_id of id (on the plan_details table).
}
...
class Moment extends AppModel {
public $name = 'Moment';
public $belongsTo = array(
'Audio' => array(
'className' => 'Audio',
'foreignKey' => 'audio_id'
)
);
내 PHP는 컨트롤러의 모습입니다 다음과 같은AudiosController :
class AudiosController extends AppController {
...
public function view($id = null) {
$this->Audio->id = $id;
$this->set('audio', $this->Audio->read());
$this->set('audios', $this->paginate());
}
...
을 그리고 내 디스크/view.ctp는 다음과 같다되어 다음과 같은 :
<table>
<!-- Sort -->
<tr>
<th><?php echo $this->Paginator->sort('id', 'DID'); ?></th>
<th><?php echo $this->Paginator->sort('audio.id', 'AID'); ?></th>
<th><?php echo $this->Paginator->sort('Audio.name', 'Audio Name'); ?></th>
<th><?php echo $this->Paginator->sort('moment.played','Audio Played') ;?></th>
</tr>
<!-- foreach ($disc['Audio'] as $audio): -->
<?php foreach ($disc['Audio'] as $audio): ?>
<?php foreach ($audio['Moment'] as $moment): ?>
<tr>
<td><?php echo $audio['Disc']['id']; ?></td>
<td><?php echo $audio['id']; ?></td>
<td><?php echo $audio['name']; ?></td>
<td><?php echo $moment['played']; ?></td>
</tr>
<?php endforeach; ?>
<?php endforeach; ?>
는 URL PARAMS을 I 정렬합니다 있습니다
는 DID :
http://localhost/cakephp/discs/view/3/sort:id/direction:asc
AID :
http://localhost/cakephp/discs/view/3/sort:audio.id/direction:asc
오디오 이름 : 내가 CakePHP의에서 새로운 오전,
http://localhost/cakephp/discs/view/3/sort:moment.played/direction:asc
은 아마 뭔가 간단하지만, 나는 해결책에 대한 많은 검색,하지만 더 성공적인 :
http://localhost/cakephp/discs/view/3/sort:Audio.name/direction:asc
오디오가 재생됩니다.
제발 도와주세요.
미리 감사드립니다.
편집 2 :
내가 몇 일 동안 밖으로이었다 당신에게 Anubhav 감사하지만 지금은 돌아 왔어요.미안하지만 나는 당신이 물었던 것을 잘 이해하지 못했습니다. 확인했는지 확인하십시오.
app/config/core.php에 Configure :: write ('debug', 3)를 설정했습니다.
그래서 print_r 배열 ('order'=> "$ sortBy. $ order")을 사용하려고했으나이 오류가 발생했습니다. 구문 오류, 예기치 않은 T_ARRAY.
그런 다음 Debugger :: dump (array ('order'=> "$ sortBy. $ order")); 내가 http://localhost/cakephp/discs/view/3/sort:id/direction:asc
을 액세스 할 때 그것은 반환이 : 나는 모든 데이터베이스 오류에 직면하지 않는 http://localhost/cakephp/discs/view/3/sort:id/direction:asc
에 액세스하지만 매기기가 여전히 실행되지 않습니다
array(
'order' => 'Audio.id.DESC'
)
. 난 그냥 http://localhost/cakephp/discs/view/3
에 액세스 할 때
는하지만 데이터베이스 에로 내가 말한 것을하기 전에 : 오류 : SQLSTATE [42S22] : 발견되지 칼럼 : 1054 알 수없는 열 'Audio.id.DESC' '주문 절에 '
그리고 SQL 쿼리는 다음과 같습니다SQL Query: SELECT `Audio`.`id`, `Audio`.`disc_id`, `Audio`.`name`, `Audio`.`downloaded`, `Audio`.`inserted`, `Disc`.`id`, `Disc`.`title`, `Disc`.`site`, `Disc`.`stream`, `Disc`.`type`, `Disc`.`command`, `Disc`.`comment`, `Disc`.`created`, `Disc`.`modified` FROM `disc_server`.`audios` AS `Audio` LEFT JOIN `disc_server`.`discs` AS `Disc` ON (`Audio`.`disc_id` = `Disc`.`id`) WHERE `Audio`.`disc_id` = 3 ORDER BY `Audio`.`id`.DESC ASC LIMIT 20
내가 뭔가를 잊어 버린 경우 도움을 너무 많이 다시 한번 감사 죄송합니다.
편집 3 :
Anubhav.
나는$this->paginate = array('order' => "$sortBy $order");
에
$this->paginate = array('order' => "$sortBy.$order");
을 변경하고 데이터베이스 오류가 사라졌다. '
array(
'order' => 'Audio.id ASC'
)
가 지금은 문제없이 http://localhost/cakephp/discs/view/3/
에 액세스 할 수 있습니다,하지만, 난 여전히 할 수 있습니다
디버거 :: 덤프 (배열 ('순서 '=> "$ sortBy $ 순서"))의 결과는 정렬하지 마라.
'order' => 'Audio.id DESC'
: 나는 Disc.php 모델의 순서를 변경하는 경우
SELECT `Audio`.`id`, `Audio`.`disc_id`, `Audio`.`name`, `Audio`.`downloaded`, `Audio`.`inserted`, `Audio`.`Disc_id` FROM `disc_server`.`audios` AS `Audio` WHERE `Audio`.`Disc_id` = (3) ORDER BY `Audio`.`id` DESC
만의 위해 (DESC 또는 ASC)를 변경 :
나는 SQL 쿼리 (NR 2) 다음은 실현 또는'order' => 'Audio.id ASC'
이렇게하면 데이터 결과 목록이 Disc.php 모델의 순서대로 정렬됩니다.
하지만, 내가 정렬 표시 링크 액세스를 기준으로 정렬하려고하는 경우 :
http://localhost/cakephp/discs/view/3/sort:audio.id/direction:desc
및
http://localhost/cakephp/discs/view/3/sort:audio.id/direction:asc
이는 SQL 쿼리 순서에 영향을주지 않습니다. 나는 기능보기에서 순서를 변경하더라도 :
public function view($id = null,$sortBy='Audio.id',$order='DESC')
또는
public function view($id = null,$sortBy='Audio.id',$order='ASC')
여전히 쿼리 순서 같은
.함수보기에서 paginate가 어떤 이유로 데이터를 정렬하지 않는다고 생각합니다.
http://localhost/cakephp/discs/view/3
다른 쿼리 (NR 7)입니다 : : 만 액세스 할 때 뭔가 이상한있다
이 쿼리의 순서 (NR 7)에만 관련이SELECT `Audio`.`id`, `Audio`.`disc_id`, `Audio`.`name`, `Audio`.`downloaded`, `Audio`.`inserted`, `Disc`.`id`, `Disc`.`title`, `Disc`.`site`, `Disc`.`stream`, `Disc`.`type`, `Disc`.`command`, `Disc`.`comment`, `Disc`.`created`, `Disc`.`modified` FROM `disc_server`.`audios` AS `Audio` LEFT JOIN `disc_server`.`discs` AS `Disc` ON (`Audio`.`disc_id` = `Disc`.`id`) WHERE `Audio`.`disc_id` = 3 ORDER BY `Audio`.`id` DESC LIMIT 20
:
public function view($id = null,$sortBy='Audio.id',$order='DESC')
그래서 $ order = 'DESC'를 ASC로 변경하면 쿼리 (Nr 7)가 순서를 변경합니다. 그러나 데이터 결과 목록의 순서는 변경되지 않습니다.
http://localhost/cakephp/discs/view/3/sort:audio.id/direction:desc
또는
http://localhost/cakephp/discs/view/3/sort:audio.id/direction:asc
쿼리 (NR 7) 순서 표시가없는 : 나는 일종의 정렬 표시 링크에 액세스하여
. 다음과 같이됩니다.
SELECT `Audio`.`id`, `Audio`.`disc_id`, `Audio`.`name`, `Audio`.`downloaded`, `Audio`.`inserted`, `Disc`.`id`, `Disc`.`title`, `Disc`.`site`, `Disc`.`stream`, `Disc`.`type`, `Disc`.`command`, `Disc`.`comment`, `Disc`.`created`, `Disc`.`modified` FROM `disc_server`.`audios` AS `Audio` LEFT JOIN `disc_server`.`discs` AS `Disc` ON (`Audio`.`disc_id` = `Disc`.`id`) WHERE `Audio`.`disc_id` = 3 LIMIT 20
죄송합니다. 너무 혼란 스럽지만,이 정보가이 문제에 대한 해결책을 찾는데 도움이되기를 바랍니다.
정말 고맙습니다. 당신은 당신의보기 기능에서 정렬 기준을 변경해야합니다 :
귀하의 질문 – Anubhav
Anubhav에 정렬시 URL PARAMS을 추가, 내가 그랬어 한 수행 너는 어떤 생각이있어? – user2155042