كيف يمكنني تنفيذ البحث على المستوى الثالث باستخدام سلوك قابل للاحتواء

StackOverflow https://stackoverflow.com/questions/3633580

سؤال

لقد طورت تطبيق كعكة PHP.

هناك جداول مثل الطلاب ، المواضع ، الدفعات ، الشركات

في جدول المواضع ، يوجد طالب و company_id وفي جدول الطلاب يوجد عمود batch_id.

في صفحة فهرس المواضع ، قمت بتطبيق شبكة JQ. ها هي لقطة الشاشة.alt text

أريد أن أقدم البحث عن الطالب والشركة والدفعة. لهذا ، استخدمت السلوك القابل للاحتواء داخل وظيفة فهرس وحدة التحكم في المواضع.

            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 

أعتقد أن العلاقة بين الطالب والدُفعات لا تعمل كما يمكن رؤيتها من الاستعلام.

أنا غير قادر على معرفة سبب تصرفه على هذا النحو.

. الرجاء مساعدتي في هذا الأمر

شكرًا

هل كانت مفيدة؟

المحلول

لا يؤدي السلوك القابل للاحتفال إلى انضمامه ، ولكنه يجعل استفسارات منفصلة لكل جدول.

استخدم ال مكون إضافي قابل للربط. إنه مكون إضافي ممتاز. سوف يحل مشكلتك بالتأكيد.

الجواب نشر بواسطة السيد. Sytzeloor على Cakeqs موقع.

باستخدام هذا البرنامج المساعد ، ستتمكن بسهولة من القيام بعملية البحث في نموذج الموضع بناءً على اسم دفعة.

هل مثل هذا في وحدة تحكم المواضع الخاصة بك وأراهن أنك ستحصل على نتائج كما هو متوقع.

$result = $this->Placement->find('all', array(
                'fields' => array('id','student_id','company_id'),
                'link' => array(
                    'Student' => array(
                        'Batch'
                    ),
                    'Company'
                ),
                'conditions' => $searchconditions,
                'order' => $sort_range,
                'limit' => $limit_range
            ));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top