PS: Things _do_ work if I specify the fields explicitly ... I was
mistakenly using find('list', array('bid_session_id','user_id'))
instead of find('list', array('fields' =>
array('bid_session_id','user_id'))) ... [well, Model::find() does have
the signature find($conditions = null, $fields = array(), $order =
null, $recursive = null) :)].
Anyway ... but why doesn't $this->User->BidSessionRegistration-
>find('list') work?!

On Aug 20, 9:46 am, eleven10 <[EMAIL PROTECTED]> wrote:
> Good observation! I had somehow missed the missing backtick ...
> another thing for which I don't understand ... I know it _has_ to be
> something subtle, but I just can't get my finger on it ...
> Anyway, here are the model classes (I have just removed some of the
> option keys from the auto-generated stuff):
>
> user.php:
> <?php
> class User extends AppModel {
>
>         var $name = 'User';
>         var $validate = array(
>                 'login' => array('alphanumeric'),
>                 'points' => array('numeric')
>         );
>
>         var $hasMany = 'Bid';
>
>         var $hasAndBelongsToMany = array(
>         'BidSession' => array('joinTable' =>
> 'bid_session_registrations')
>         );
>
> }
>
> ?>
>
> bid_session.php
> <?php
> class BidSession extends AppModel {
>
>         var $name = 'BidSession';
>         var $validate = array(
>                 'title' => array('alphanumeric'),
>                 'cap' => array('numeric')//,
>                 //'starts_at' => array('date'),
>                 //'ends_at' => array('date')
>         );
>
>         var $hasMany = 'Bid';
>
>         var $hasAndBelongsToMany = array(
>         'User' => array('joinTable' => 'bid_session_registrations')
>         );
>
> }
>
> ?>
>
> bid.php
> <?php
> class Bid extends AppModel {
>
>         var $name = 'Bid';
>         var $validate = array(
>                 'bid_points' => array('numeric')
>         );
>
>         var $belongsTo = array('User', 'BidSession');
>
> }
>
> ?>
>
> It doesn't help even if I specify the 'foreignKey' and
> 'associationForeignKey' in the HABTM relationship.
> As a quick-and-dirty debug, I put the line
>     pr($query);
> in Model::find() [CORE\cake\libs\model\model.php] just before the call
> to $db->read($this, $query); on line 1795. This is what I get (url: /
> users/add):
> Array
> (
>     [conditions] =>
>     [fields] => Array
>         (
>             [0] => BidSessionRegistration.user_id
>             [1] => BidSessionRegistration.
>         )
>
>     [joins] => Array
>         (
>         )
>
>     [limit] =>
>     [offset] =>
>     [order] => Array
>         (
>             [0] =>
>         )
>
>     [page] => 1
>     [group] =>
>     [callbacks] => 1
>     [recursive] => -1
>     [list] => Array
>         (
>             [groupPath] =>
>             [valuePath] => {n}.BidSessionRegistration.
>             [keyPath] => {n}.BidSessionRegistration.user_id
>         )
>
> )
> In the docs for Model::find() it's written that:
>  * Specifying 'fields' for new-notation 'list':
>  *  - If no fields are specified, then 'id' is used for key and 
> 'model->displayField' is used for value.
>
>  *  - If a single field is specified, 'id' is used for key and
> specified field is used for value.
>  *  - If three fields are specified, they are used (in order) for key,
> value and group.
>  *  - Otherwise, first and second fields are used for key and value.
> So I modified the auto-generated 
> $this->User->BidSessionRegistration->find('list') call in 
> users_controller.php by explicitly specifying
>
> the fields as array('bid_session_id', 'user_id') ... still, no
> improvement.
> Now I changed the bid_session_registrations table by removing PK
> (bid_session_id, user_id) and adding an id field (although I guess
> there's no need to do that for join tables that are not separately
> modeled...). Now, the debug output reads:
> Array
> (
>     [conditions] =>
>     [fields] => Array
>         (
>             [0] => BidSessionRegistration.id
>             [1] => BidSessionRegistration.id
>         )
> .
> .
> .
>     [list] => Array
>         (
>             [groupPath] =>
>             [valuePath] => {n}.BidSessionRegistration.id
>             [keyPath] => {n}.BidSessionRegistration.id
>         )
>
> )
> But this is not what I want...
> Also, I have no clue why the bake script related User to
> BidSessionRegistration not BidSession in /user/add...
>
> Sorry for the long post, but I am really confused why things are
> happening the way they are. Thanks for all the help!
>
> On Aug 20, 3:47 am, MonkeyGirl <[EMAIL PROTECTED]> wrote:
>
> > > (a) If I go to /users/add, I get the following SQL error: 1064: You
> > > have an error in your SQL syntax; ... near 'bid_session_registrations`
> > > AS `BidSessionRegistration`   WHERE 1 = 1' at line 1 [CORE\cake\libs
> > > \model\datasources\dbo_source.php, line 512]. Query: SELECT
> > > `BidSessionRegistration`.`user_id`, BidSessionRegistration`. FROM
> > > `bid_session_registrations` AS `BidSessionRegistration` WHERE 1 = 1.
> > > Note the missing field name before 'FROM'. This table has PK
> > > (bid_session_id, user_id). If I remove that and add an id field as PK,
> > > things start working. However, since I am not interested in using this
> > > join model directly, I shouldn't have to do this ... as far as I
> > > understand from the manual and other cake blogs/tutorials.
>
> > What you're doing in general sounds right to me.  If that's a straight
> > copy-and-paste, note that you're also missing a backtick just before
> > the table name that has a missing column.  It sounds like CakePHP's
> > getting somewhat confused about the table structure.  Check for any
> > typos or anything slightly askew in the models.  Whenever I've had
> > similar errors myself, it's usually something subtle but not
> > particularly complex.  If that doesn't help, maybe pasting the models'
> > classes here might shed some light on the problem.
>
> > Hope that helps,
> > Zoe.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to