簡體   English   中英

CakePHP檢索數據,關聯模型,可包含的行為

[英]CakePHP retrieve data, associate models, containable behavior

我似乎無法弄清楚可容納行為是如何工作的,或者如何從(和基於)關聯模型中檢索數據。

我需要將以下MySQL查詢放入cakephp find('all')函數中,我知道我可以使用查詢生成器來獲取sql語法,但是我想使用find函數並想弄清楚它是如何工作的。

SELECT events.id, events.name FROM events, user_roles
WHERE user_roles.event_id = events.id
AND user_roles.user_id = 1

這個想法很簡單,在user_roles中存儲了user_id,role_id和event_id。 現在,我想檢索某個用戶的所有事件(此處為user_id = 1)。 我在以下方面嘗試了一些變體:

$data = $this->Event->find('all',array(
            'contain' => array(
                'UserRole' => array(
                    'fields' => array('id'),
                    'conditions' => array(
                        'UserRole.user_id' => $this->Auth->user('id')
                    )
                )
            )
        ));

但這一直返回所有事件。 我想要的是一個數組(或具有相同關聯數據的任何其他結果):

array(
    [0] => array(
        [Event] => array(
            'id' => 1,
            'name' => 'Event Name'
        ),
        [UserRole] => array(
            'role_id' => 2,
            'event_id'=> 1
        )
    [1] => array(
        .... etc ...
)

定義了以下模型和關聯

class Event extends AppModel {
    public $hasMany = array(
        'UserRole' => array(
            'className' => 'UserRole',
            'foreignKey' => 'event_id',
            'dependent' => false,
        )
    )
)

class UserRole extends AppModel {
    public $belongsTo = array(
       'Event' => array(
            'className' => 'Event',
            'foreignKey' => 'event_id'
        ),
    )
)

那么它是怎樣工作的 ;)。

編輯:

我忘了提到我在AppModel.php中設置的內容:

public $recursive = -1;

Containable查找原始查詢的關聯記錄。 你在做什么是find('all')在你的Event模型,絕對沒有條件,所以它返回所有活動。

然后,Containable將檢索給定user_id所有UserRole記錄,並通過event_id將其與Event相關聯

如果您只想檢索給定用戶的事件,則可以采用以下兩種方法之一

通過Event-> UserRole關聯和鏈接的模型:

$data = $this->Event->UserRole->find('first', array(
    'conditions' => array('UserRole.user_id' => $this->Auth->user('id'),
    'contain' => array('Event')
));

$events = $data['Event'];

要么

通過當前代碼,然后使用Hash::extract方法獲取匹配的事件。 Hash是一個CakePHP核心類)

$events = Hash::extract('/UserRole[user_id='.$this->Auth->user('id').']/..', $data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM