Как реализовать поиск на третьем уровне, используя сдерживаемое поведение?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как реализовать поиск на третьем уровне, используя сдерживаемое поведение?

Сообщение Anonymous »

Я разработал PHP-приложение для торта.

В нем есть такие таблицы, как студенты, места размещения, партии, компании

В таблице мест размещения есть Student_id,company_id, а в таблице студентов есть столбец Batch_id.

На индексной странице мест размещения я применил сетку jq. Вот снимок экрана.
Изображение


Я хочу дать поиск по студенту, компании и партии. Для этого я использовал сдерживаемое поведение внутри индексной функции контроллера мест размещения.

Код: Выделить всё

            if( $this->params['url']['_search'] == 'true' ) /* For Searching*/
{
//pr($this->params);

$searchconditions = array();

if( isset($this->params['url']['studentname']) && !empty($this->params['url']['studentname']) )
{
array_push(&$searchconditions, array('Student.fullname LIKE' => $this->params['url']['studentname'] . '%'));
}
if( isset($this->params['url']['companyname']) && !empty($this->params['url']['companyname']) )
{
array_push(&$searchconditions, array('Company.name LIKE' => $this->params['url']['companyname'] . '%'));
}
if( isset($this->params['url']['batchname']) && !empty($this->params['url']['batchname']) )
{
array_push(&$searchconditions, array('Batch.name LIKE' => $this->params['url']['batchname'] . '%'));
}

$result = $this->Placement->find('all', array(
'fields' => array('id','student_id','company_id'),
'contain' => array(
'Student' => array(
'fields' => array('id','fullname','batch_id'),
'Batch' => array(
'fields'=> array('id','name')
)
),
'Company' => array(
'fields' => array('id','name')
)
),
'conditions' => $searchconditions,
'order' => $sort_range,
'limit' => $limit_range
));
}
else /* Default display*/
{
$result = $this->Placement->find('all', array(
'fields' => array('id','student_id','company_id'),
'contain' => array(
'Student' => array(
'fields' => array('id','fullname','batch_id'),
'Batch' => array(
'fields'=> array('id','name')
)
),
'Company' => array(
'fields' => array('id','name')
)
),
'order' => $sort_range,
'limit' => $limit_range
));
}
Сетка прекрасно заполняется именем учащегося, названием компании и названием пакета (если есть).
Поиск также работает нормально, если я искал по имени учащегося. & название компании, но когда я попытался выполнить поиск по названию партии, я получил следующую ошибку:

Код: Выделить всё

Warning (512): SQL Error: 1054: Unknown column 'Batch.name' in 'where clause' [APP\vendors\cakephp\cake\libs\model\datasources\dbo_source.php, line 681]

Query: SELECT `Placement`.`id`, `Placement`.`student_id`, `Placement`.`company_id`, `Student`.`id`, `Student`.`fullname`, `Student`.`batch_id`, `Company`.`id`, `Company`.`name` FROM `placements` AS `Placement` LEFT JOIN `students` AS `Student` ON (`Placement`.`student_id` = `Student`.`id`) LEFT JOIN `companies` AS `Company` ON (`Placement`.`company_id` = `Company`.`id`)  WHERE `Batch`.`name` LIKE 'df%'   ORDER BY `Placement`.`id` asc  LIMIT 0,10
Я думаю, что связь между учеником и пакетом не работает, как видно из запроса.

Я я не могу понять, почему он так себя ведет.

Пожалуйста, помогите мне в этом.

Спасибо< /п>

Подробнее здесь: https://stackoverflow.com/questions/363 ... e-behavior
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»