2017-03-18 62 views
0

我有兩個表StandardsTopicsStandard包含id, user_id, nameTopics包含id, user_id, name, school_id選擇數據從數據庫中的表2的條件CakePHP的

我想從用戶登錄條件中檢索StandardsTopics中的數據。所以用戶只能看到他們的學校名稱。

錯誤:錯誤是,它將顯示學校名稱屬於所有用戶,而不僅僅是登錄用戶。

我想顯示登錄的學校名稱用戶。

這是我的控制器:

public function admin_subject_list($standard_id = null) 
{ 
    $this->loadModel('Subject'); 
    $this->Subject->bindModel(array(
         'belongsTo'=>array(
          'Standard' 
         ), 
         'hasMany'=>array(
          'Topic' 
         ) 
    ),false); 

    $standard_data = $this->Standard->find('first',array('conditions'=>array('Standard.id'=>$standard_id))); 

    $filters  = array('Topic.id'=>$this->Auth->user('id')); 

    $filter = array('Subject.standard_id'=>$standard_id); 
    $data = $this->Subject->find('all',array('conditions'=>$filter));  
    $this->set(compact('data','standard_id','standard_data')); 
    $this->set('title_for_layout', __('Standards', true));  
} 

這是我的看法文件standartd_list.ctp

<?php 
    } 
    // pr($data); 
    $color = array('bg-kypta','bg-green','bg-aqua','bg-uni-n','bg-light-blue','bg-orange','bg-ferozi','bg-light-bluen','bg-light-yellow','bg-teal','bg-maroon'); 
    foreach($data as $key=>$value) 
    { 
     $random = rand(0,10); 
     $get_subscribe_subject = $this->General->getSubscribeTutor($value['Subject']['id']); 
     if(empty($get_subscribe_subject)) 
     { 
     ?>   
     <div class="col-lg-3 col-xs-6"> 
      <!-- small box --> 
      <div class="small-box <?php echo $color[$random]?>"> 
       <div class="icon"> 
        <i class="ion ion-person-add"></i> 
       </div> 
       <a style="width:33.33%;float:left;" class="small-box-footer" href="<?php echo Router::url(array('controller'=>'subjects','action'=>'view',$value['Subject']['id']))?>"> 
        <i class="fa fa-arrow-circle-right"></i>&nbsp; Preview 
       </a> 
       <a style="width:33.33%;float:left;" class="small-box-footer" href="<?php echo Router::url(array('controller'=>'subjects','action'=>'edit',$value['Subject']['id']))?>"><i class="fa fa-cog" aria-hidden="true"></i>&nbsp; Setting 
       </a> 
       <a style="width:33.33%;float:left;" data-tab="yes" data-rel="<?php echo $value['Subject']['id'];?>" class="small-box-footer delete_subject_class" href="javascript:void(0)"><i class="fa fa-trash-o" aria-hidden="true"></i>&nbsp; Delete 
       </a> 
      </div> 
     </div> 
     <?php 
     } 
     else 
     { 
      // pr($get_subscribe_subject);die; 
      foreach($get_subscribe_subject as $k=>$v) 
      { 
       $random = rand(0,10); 
      ?> 
      <div class="col-lg-3 col-xs-6"> 
      <!-- small box --> 
       <div class="small-box <?php echo $color[$random]?>"> 
        <div class="inner"> 
         <h3> 
          <?php 
          if($v['SubjectTutor']['status'] == 1) 
          { 
           $is_approved = 'yes'; 
          } 
          else 
          { 
           $is_approved = 'no'; 
          } 
          //goToTopicList 
          ?> 
          <a data-subject_tutor_id="<?php echo $v['SubjectTutor']['id'];?>" data-is_approved="<?php echo $is_approved;?>" style="color:#fff;" class="small-box-footer" href="<?php echo Router::url(array('controller'=>'subjects','action'=>'topic_list',$v['SubjectTutor']['id']))?>"> 
          <?php echo $value['Subject']['name']?> <?php echo $v['School']['name']?> <br>by <?php echo $v['Tutor']['first_name']." ".$v['Tutor']['last_name'] ?> 
          </a> 
          <br> 
         </h3> 
         <p> 
         <?php 
         $get_subject_topic_count = $this->General->getSubjectTutorTopicCount($v['Tutor']['id'],$value['Subject']['id'],$v['SubjectTutor']['province_id'],$v['SubjectTutor']['city_id'],$v['SubjectTutor']['school_id'],$v['SubjectTutor']['state_private']); 
         echo count($get_subject_topic_count); 
         ?> 
         Topic(s)</p> 
        </div> 
        <div class="icon"> 
         <i class="ion ion-person-add"></i> 
        </div> 
        <a style="width:33.33%;float:left;" class="small-box-footer" href="<?php echo Router::url(array('controller'=>'subjects','action'=>'view_tutor_subject',$v['SubjectTutor']['id']))?>"> 
         <i class="fa fa-arrow-circle-right"></i>&nbsp; Preview 
        </a> 
        <!-- 
        <a style="width:33.33%;float:left;" class="small-box-footer" href="<?php echo Router::url(array('controller'=>'subjects','action'=>'edit',$value['Subject']['id']))?>"><i class="fa fa-cog" aria-hidden="true"></i>&nbsp; Setting 
        </a>--> 
        <?php 
        $check_student_subscribe = $this->General->getSubscribeInfo($v['Tutor']['id'],$value['Subject']['id']); 
        if(empty($check_student_subscribe)) 
        { 
         $is_deletable = 'yes'; 
        } 
        else 
        { 
         $is_deletable = 'no'; 
        } 
        ?> 
        <a style="width:33.33%;float:left;" data-tab="<?php echo $is_deletable?>", data-subject_tutor_id="<?php echo $v['SubjectTutor']['id'];?>" class="small-box-footer delete_item_class" href="javascript:void(0)"><i class="fa fa-trash-o" aria-hidden="true"></i>&nbsp; Delete</a> 
       </div> 
      </div> 
     <?php 
      } 
     } 
    } 
    ?> 
+0

請問您能顯示'$ data'的調試嗎? – Aarrbee

+0

當我編譯程序的所有用戶的學校名稱將被顯示,而不僅僅是用戶登錄 – wendy

+0

@ Rik.esh嗨。我忘了我在generalhelper.php中有一個更多的功能,請參閱並幫助我https://stackoverflow.com/questions/42895678/select-data-from-2-table-with-condition-cakephp-2-x – wendy

回答

0

你被檢查登錄的用戶與題目的ID。所以,在你的情況下,你需要檢查登錄用戶的ID與主題的user_id

public function admin_subject_list($standard_id = null) 
{ 
    $this->loadModel('Subject'); 
    $this->Subject->bindModel(array(
        'belongsTo'=>array(
         'Standard' 
        ), 
        'hasMany'=>array(
         'Topic' 
        ) 
    ),false); 

    $standard_data = $this->Standard->find('first',array('conditions'=>array('Standard.id'=>$standard_id))); 

    $this->Subject->Behaviors->load('Containable'); 
    $userId = $this->Auth->user('id'); 
    $filters = array('Subject.standard_id'=>$standard_id); 
    $data = $this->Subject->find('all',array('conditions'=>$filters, 'contain' => array('Standard', 'Topic' => array('conditions' => array('Topic.user_id' => $userId))))); 

    $this->set(compact('data','standard_id','standard_data')); 
    $this->set('title_for_layout', __('Standards', true));  
} 
+0

錯誤:找不到列:1054'Where子句'中的未知列'Topic.user_id' – wendy

+0

但iam確定主題表containe user_id – wendy

+0

我已通過使用包含條件更新答案。請檢查。 – Aarrbee

0

它看起來像你使用CakePHP 2.x的,對不對?這也有點不清楚你在問什麼,但我相信你應該只能使用標準find() s。

I want to display school name user who log on.

$topics = $this->Topic->find('all', [ 
    'conditions' => [ 
     'user_id' => $this->Auth->user('id') 
    ] 
]); 
$standards = $this->Standard->find('all', [ 
    'conditions' => [ 
     'user_id' => $this->Auth->user('id') 
    ] 
]); 

這會發現,關聯w的用戶登錄/所有主題,以及與登錄的用戶相關聯的所有標準。

或者,你甚至可以用在蛋糕中可用的動態查找器簡化它:

$topics = $this->Topic->findByUserId($this->Auth->user('id')); 
$standards = $this->Standard->findByUserId($this->Auth->user('id')); 
+0

yes im使用cakephp 2.x.我已經改變$ data = $ this-> Subject-> findByUserId($ this-> Auth-> user('id')); \t但它沒有任何損失。請告訴我什麼行我應該刪除或更改 – wendy