Survey hasMany SurveyUser
User hasMany SurveyUser
SurveyUser belongsTo Survey
SurveyUser belongsTo User
with ContainableBehavior (see: http://book.cakephp.org/view/1323/Containable),
you can try something like the following in your controller:
// Get list of all surveys, and any responses the user has made to
the surveys
$surveys = $this->Survey->find('all', array(
'contain' => array(
'SurveyUser' => array(
'conditions' => array(
'SurveyUser.user_id' => $user_id
)
)
)
));
The resulting array will be all the surveys, with a sub-array (index
name is 'SurveyUser'). If the user has not answered the survey, the
sub-array will be empty, but the surveys the user has answered will
also have a one-element sub-array containing the corresponding
SurveyUser row for that user (and you can use that to "grey-out" the
survey record on your view).
If you prefer to completely exclude the surveys that the user has
answered, you can always do something like:
// Get list of surveys user has answered
$answered = $this->Survey->SurveyUser->find('all', array(
'conditions' => array(
'SurveyUser.user_id' => $user_id
)
);
// Get list of all surveys, excluding the ones answered by the user
$surveys = $this->Survey->find('all', array(
'conditions' => array(
'Survey.id NOT IN (' . join(',', Set::extract('/SurveyUser/id',
$answered)) . ')'
)
);
Set::extract (see: http://book.cakephp.org/view/1501/extract) is used
to convert $answered to a simple array of just the ids of the
SurveyUser records.
Or you can combine both using method outlined in
http://book.cakephp.org/view/1030/Complex-Find-Conditions, under the
section "Sub-queries".
For more information on the model relationship types, see
http://book.cakephp.org/view/1039/Associations-Linking-Models-Together
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
No comments:
Post a Comment