2014-02-19 40 views
0

我正在使用CakePHP 2.3.8,並且在搜索工作中遇到了一些麻煩。我有一個與「訂閱」表有着許多關係並且屬於「用戶」表的「公司」表。我想根據用戶類型來限制我的搜索,但我得到一個錯誤,當我將其包括在搜索(見下文)在CakePHP shell中進行搜索

所以,當我搜索$this->Company->find('all');這樣的事返回

(
[0] => Array 
    (
     [Company] => Array 
      (
       [id] => 1 
       [first_name] => Test 
       [last_name] => Person 
       [company_name] => Test Company 
       [address] => 123 Test 
       [city] => New York 
       [state] => Ny 
       [zip] => 12345 
       [phone] => 1234567 
      ) 

     [User] => Array 
      (
       [email] => [email protected] 
       [created] => 2014-01-09 
       [id] => 1 
       [role] => user 
       [username] => TestUser 
      ) 

     [Subscription] => Array 
      (
       [0] => Array 
        (
         [id] => 1 
         [user_id] => 1 
         [start_date] => 2014-01-09 
         [expire_date] => 2014-07-09 
         [subscription_plan] => standard 
         [amount_paid] => 0.00 
         [status] => valid 
        ) 

      ) 

    ) 

我正在通過訂閱進行搜索,我想根據角色進行限制。如果它是試用帳戶或管理員,請跳過它。然而,蛋糕似乎並沒有讓我通過這些連接表

當我嘗試下面的查詢

$companies = $this->Company->find('all',array(
            'conditions' => array(
              'User.role !=' => array('admin','trial'), //don't select any admins or trial members 
              ) 
            )); 

我收到以下錯誤SQLSTATE[42S22]: Column not found: 1054 Unknown column 'User.role' in 'where clause'

我不能進行「加入」搜索在shell中像這樣搜索?當我搜索所有公司並輸出結果時,它顯示正確選擇了用戶表,爲什麼我不能將搜索限制在某些類型的用戶?

編輯 - 我已經切換到使用容器,它部分工作,但也許我只是誤解了包容的功能。這是新搜索

$this->Company->contain(array(
         'User' => array(
          'conditions' => array(
          'User.role !=' => array('owner','site_owner','trial','admin') 
         ) 
         ) 
        )); 
    $this->companies = $this->Company->find('all'); 

它選擇每個公司,但只選擇一個用戶(對於該公司),如果它符合標準。這裏有一個例子結果

[0] => Array 
    (
     [Company] => Array 
      (
       [id] => 1 
       [first_name] => Test 
       [last_name] => Person 
       [company_name] => Test Company 
       [address] => 123 Test 
       [city] => New York 
       [state] => Ny 
       [zip] => 12345 
       [phone] => 1234567 
      ) 

     [User] => Array 
      (
       [email] => [email protected] 
       [created] => 2014-01-09 
       [id] => 1 
       [role] => user 
       [username] => TestUser 
      ) 
    [1] => Array 
    (
     [Company] => Array 
      (
       [id] => 2 
       [first_name] => Test2 
       [last_name] => Person2 
       [company_name] => Test Company2 
       [address] => 123 Test 
       [city] => New York 
       [state] => Ny 
       [zip] => 12345 
       [phone] => 1234567 
      ) 

     [User] => Array //this user's role is admin so it was not selected 
      (
      ) 

我只希望它選擇一個公司,如果滿足用戶條件。這甚至有可能嗎?

+0

我在試圖對相關模型做條件時一直有問題。使用可容忍的行爲,而你可能會有更多的運氣。 – Kai

+0

我可以在沒有指定容器的情況下在shell中執行聯合搜索。您是否已在公司模型中正確定義$ belongsTo/$ hasMany? (公司模式中的公司模式不僅限於用戶模式)。這些表在同一個數據庫中嗎? – isick

+0

在我的公司模型中,我擁有belongsTo用戶。在我的用戶我有一個公司。我已經在我的用戶模型中嘗試過使用hasOne,不管發生了什麼,都會發生同樣的事情。 – user1104854

回答

0

你有正確的想法,但我不認爲的語法是正確的不等於。試試這個:

$this->Company->find('all', array(
    'conditions' => array(
     'NOT' => array(
      'User.role' => array('admin','trial') 
     ) 
    ) 
)); 
+0

這是行不通的。 Cake不喜歡我將搜索限制在除我正在搜索的那個(公司)之外的任何其他表上。即使我嘗試'User.role'=>'admin'(沒有沒有),我仍然得到錯誤。 – user1104854