2014-10-19 55 views
0

我有兩個型號:UsersLessons爲什麼模型關聯中的條件不會在CakePHP中過濾控制器中的查找結果?

  • User有一個Teacher
  • User有屬於許多Students

兩個TeachersStudentsUsers

在我Users模型我哈已經這個協會:

public $hasMany = array(
    'Lesson' => array(
     'className' => 'Lesson', 
     'foreignKey' => 'user_id', 
     'dependent' => false, 
    ) 
); 

在我Lessons模型我現在有這樣的聯想:

public $belongsTo = array(
    'Teacher' => array(
     'className' => 'User', 
     'foreignKey' => 'teacher_id', 
     'conditions' => array('Teacher.group_id' => '2'), 
     'fields' => '', 
     'order' => '' 
    ) 
); 

我的問題是:

  1. 爲什麼$teachers = $this->Lesson->Teacher->find('list');回報所有users而不僅僅是teachers?爲什麼模型的belongsTo部分中設置的條件沒有將結果過濾爲僅顯示Usersgroup_id爲2的結果,即Teachers?如果這不是它應該工作的方式,那麼在這裏設定條件的重點是什麼?

    截至目前我已經把它列入了尋找每一個似乎有點多餘時間:$teachers = $this->Lesson->Teacher->find('list', array('conditions'=>array('Teacher.group_id'=>'2')))

  2. 我如何寫Students使Lessons有很多學生的關聯?我該如何爲它設置數據庫?
+0

關於您問題的數據庫部分:您需要分享您當前的表_(用戶,教師,學生,課程,users_teachers等)_是和_(至少)_這些表的主鍵和外鍵。由於使用Cakephp術語,您的問題令人困惑,因爲聲明「用戶有一位教師」意味着2個表格。但是,在課程模型中您的belongsTo關係將教師描述爲用戶表的子集。 – AgRizzo 2014-10-20 11:40:34

回答

0

在協會的條件應改爲包括型號的名稱,而不是別名:

'conditions' => array('User.group_id' => 2), 

2.該協會應該是hasAndBelongsToMany (HABTM),並且可以在被定義您的User模型是這樣的:

public $hasAndBelongsToMany = array(
    'Lessons' => array(
     'className' => 'Lesson', 
     'joinTable' => 'lessons_users', // or the name from DB 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'lesson_id', 
     'unique' => 'keepExisting' // Set this based on your needs, check link above 
    ) 
); 

鑑於以上關聯,您需要一個新表lessons_users在你的數據庫來存儲有關學生和經驗之間的這種關係數據:

  +++++++++++++++++++++++++++++++++++++++++++++++++ 
      + id (pk) + lesson_id (fk) + user_id (fk) + 
      +++++++++++++++++++++++++++++++++++++++++++++++++ 
      +  1  +   1  +  1  + 
      +-----------+------------------+----------------+ 
      +  2  +   1  +  2  + 
      +-----------+------------------+----------------+ 
      +  3  +   2  +  1  + 
      +-----------+------------------+----------------+ 
      +  4  +   2  +  2  + 
      +++++++++++++++++++++++++++++++++++++++++++++++++ 

從上面的例子; ID爲1的用戶正在上課1 & 2,而ID爲2的用戶也正在上課1 & 2。同樣,ID爲1的課程已註冊用戶ID爲1 &,ID爲2的課程註冊用戶ID爲1 & 2。

+0

1)更改條件以使用模型名稱而不是別名會導致sql錯誤(根據我的理解,CakePHP在查詢中使用別名?) 2)如何幫助我訪問課程中的學生模型 – Chaim 2014-10-19 13:58:49

+0

** 1)**我不確定在這一個確切的確定,但我認爲你不能在那裏使用別名,因爲這是你開始的定義別名的地方! ** 2)**如果您之前沒有這個關聯,則必須將相同的關聯(將字段名稱更改爲c)添加到「課程」模型中,然後使用可包含行爲來查找您的數據。檢查此問題[類似的問題。](http://stackoverflow.com/questions/13826474/cakephp-containable-with-habtm「HABTM Containable」) – kshaaban 2014-10-19 19:00:44

相關問題