Have you tried creating an id field in the join table and setting that field
and only that field to be the primary key?



Brenton B wrote:
> 
> 
> Ok, so I can kind of understand the use of `$foreignKey` as something
> to compare on, but that still doesn't explain why we're limiting to
> unique Ids.
> 
> Quite frustrating without an explanation.
> 
> On Oct 7, 2:28 am, Brenton B <[EMAIL PROTECTED]> wrote:
>> Ok, so the "root" where all this non-unique stuff occurs seems to be
>> in dbo_source.php, line 841:
>>
>>                                         if ($type ==
>> 'hasAndBelongsToMany') {
>>                                                 $uniqueIds = $merge =
>> array();
>>
>>                                                 foreach($fetch as $j =>
>> $data) {
>>                                                         if (
>>                                                                
>> (isset($data[$with]) && $data[$with][$foreignKey] ===
>> $row[$model->alias][$model->primaryKey]) &&
>>                                                                
>> (!in_array($data[$with][$joinKeys[1]], $uniqueIds))
>>                                                         ) {
>>                                                                
>> $uniqueIds[] = $data[$with][$joinKeys[1]];
>>
>>                                                                 if
>> ($habtmFieldsCount <= 2) {
>>                                                                        
>> unset($data[$with]);
>>                                                                 }
>>                                                                 $merge[]
>> = $data;
>>                                                         }
>>                                                 }
>>                                                 if (empty($merge) &&
>> !isset($row[$association])) {
>>                                                        
>> $row[$association] = $merge;
>>                                                 } else {
>>                                                        
>> $this->__mergeAssociation($resultSet[$i], $merge, $association,
>> $type);
>>                                                 }
>>                                         }
>>
>> Fair enough ... but why?? So this kills any possibility of showing
>> duplicates, that might be good, but shouldn't it bring back
>> everything, thus revealing any possibility of screwiness in app code?
>>
>> Since it's a HABTM relationship, shouldn't the whole "has and belongs
>> to many" retrieve all that it has and belongs to?
>>
>> There's obviously something I'm missing and confused about ...
>> unfortunately no comments in code to shed light.
>>
>> (Note: to recap, I've got a user HABTM webpage_types in users-
>> webpage_types  with extra fields where a user could multiple of the
>> same webpage_type)
>>
>> On Oct 6, 1:41 pm, Brenton B <[EMAIL PROTECTED]> wrote:
>>
>> > So, moving to the solution nachopitt suggested "works" ... however,
>> > because of this, for saving, I have to use `saveAll()` instead of
>> > `save()` ... which "works"; however, for the User model, there's also
>> > another HABTM which doesn't work for `saveAll()` ... doh!!
>>
>> > Best solution?
>>
>> > On Oct 6, 11:03 am, Brenton B <[EMAIL PROTECTED]> wrote:
>>
>> > > Well, the table looks more like this:
>>
>> > > user_id | web_page_type_id | url
>> > >
>> -----------------------------------------------------------------------
>> > >     7      |          6                 | firstdomain.com
>> > >     7      |          6                 | second.com
>>
>> > > So the two are unique, but I see what you're saying.
>>
>> > > I did originally have it setup in such a way that it wasn't a typical
>> > > join table (as nachopitt suggested); however, was running into
>> > > problems with saving in one fell swoop and wanted to give the "HABTM
>> > > save setup" a try (as described everywhere).
>>
>> > > Might have to go back to the previous method.
>>
>> > > On Oct 4, 7:33 am, nachopitt <[EMAIL PROTECTED]> wrote:
>>
>> > > > Yeah, teknoid has a point. Your relation/association is not
>> supposed
>> > > > to work in that way. Normally, in a non CakePHP enviroment, a
>> > > > joinTable has the 2 foreign keys and they set as the "primary key"
>> > > > column. You donĀ“t have the "id" column that CakePHP expects to have
>> > > > and then the foreign keys... thats why the "uniqueness" of the
>> > > > records.
>>
>> > > > Personally i would change the schema of you database for something
>> > > > like
>>
>> > > > users
>> > > > web_pages (holding the url, title, etc)
>> > > > web_page_types (holding the name of the webpage type)
>>
>> > > > And the associations
>>
>> > > > user hasMany webpages
>> > > > webpage belongsTo user
>> > > > webpage belongsTo webpageType
>>
>> > > > On Oct 3, 6:37 pm, teknoid <[EMAIL PROTECTED]> wrote:
>>
>> > > > > Goes to show I should read more carefully :)
>> > > > > I guess the title of the post made me jump the gun...
>>
>> > > > > You say "an user has 2 of the same webpage_type"
>>
>> > > > > Does it mean that in your join table you have something like: ?
>> > > > > user_id | web_page_type_id
>> > > > > -----------------------------------------
>> > > > >     7      |          6
>> > > > >     7      |          6
>>
>> > > > > On Oct 3, 6:27 pm, Brenton B <[EMAIL PROTECTED]> wrote:
>>
>> > > > > > Well, assuming the Docs are correct (and I understand it
>> properly),
>> > > > > > that should only apply to updates ("If true (default value)
>> cake will
>> > > > > > first delete existing relationship records in the foreign keys
>> table
>> > > > > > before inserting new ones, when updating a record. So existing
>> > > > > > associations need to be passed again when updating").
>>
>> > > > > > However, in my circumstance, I'm just retrieving information
>> ...
>>
>> > > > > > Debug SQL shows the (as expected) query of getting all webpages
>> &
>> > > > > > types based on the user_id, and it retrieves all the
>> information
>> > > > > > that's needed; however, by the time I get to the view (where I
>> have a
>> > > > > > `pr()`), I've magically lost one of 'em - well, actually, any
>> > > > > > subsequent webpage_type record that has the same id.
>>
>> > > > > > Conventions: Yeah, I know those were just there, left over from
>> > > > > > scaffolding, so figured no harm in leaving 'em ...
>>
>> > > > > > On Oct 3, 3:19 pm, teknoid <[EMAIL PROTECTED]> wrote:
>>
>> > > > > > > Do you know what 'unique'=>true does?
>>
>> > > > > > > Btw, there really isn't any need to define default values for
>> your
>> > > > > > > associations if you follow the conventions.
>>
>> > > > > > > On Oct 3, 6:10 pm, Brenton B <[EMAIL PROTECTED]>
>> wrote:
>>
>> > > > > > > > Ok, so here's the scenario ...
>>
>> > > > > > > > A user can have multiple webpages in their account, and
>> when they set
>> > > > > > > > them up, they must choose the type (ex: blog, gallery,
>> etc). So User
>> > > > > > > >HABTMwebpage_type ... where users_webpage_types has
>> additional fields
>> > > > > > > > for URL, title, etc.
>>
>> > > > > > > > The thing I'm running into is upon retrieving: If an user
>> has 2 of the
>> > > > > > > > same webpage_type, it performs the SQL to get 'em all, but
>> once it's
>> > > > > > > > done it's magic, it only has the first record. I'm assuming
>> this is
>> > > > > > > > due to the occurrence of the same webpage_type_id, but
>> still lost ...
>>
>> > > > > > > > User::
>>
>> > > > > > > >         var $hasAndBelongsToMany = array(
>> > > > > > > >                         'WebpageType' => array('className'
>> => 'WebpageType',
>> > > > > > > >                                                 'joinTable'
>> => 'users_webpage_types',
>> > > > > > > >                                                
>> 'foreignKey' => 'userr_id',
>> > > > > > > >                                                
>> 'associationForeignKey' => 'webpage_type_id',
>> > > > > > > >                                                 'with' =>
>> 'UsersWebpageType',
>> > > > > > > >                                                 'unique' =>
>> true,
>> > > > > > > >                         ),
>>
>> > > > > > > > WebpageType::
>>
>> > > > > > > >         var $hasAndBelongsToMany = array(
>> > > > > > > >                         'User' => array('className' =>
>> 'User',
>> > > > > > > >                                                 'joinTable'
>> => 'users_webpage_types',
>> > > > > > > >                                                
>> 'foreignKey' => 'webpage_type_id',
>> > > > > > > >                                                
>> 'associationForeignKey' => 'user_id',
>> > > > > > > >                                                 'with' =>
>> 'UsersWebpageType',
>> > > > > > > >                                                 'unique' =>
>> true,
>>
>> > > > > > > > UsersWebpageType::
>>
>> > > > > > > >         var $belongsTo = array(
>> > > > > > > >                         'User' => array('className' =>
>> 'User',
>> > > > > > > >                                                                
>> 'foreignKey' => 'user_id',
>> > > > > > > >                                                                
>> 'conditions' => '',
>> > > > > > > >                                                                
>> 'fields' => '',
>> > > > > > > >                                                                
>> 'order' => ''
>> > > > > > > >                         ),
>> > > > > > > >                         'WebpageType' => array('className'
>> => 'WebpageType',
>> > > > > > > >                                                                
>> 'foreignKey' => 'webpage_type_id',
>> > > > > > > >                                                                
>> 'conditions' => '',
>> > > > > > > >                                                                
>> 'fields' => '',
>> > > > > > > >                                                                
>> 'order' => ''
>> > > > > > > >                         )
>> > > > > > > >         );
>>
>> > > > > > > > Seriously confused ....
>>
>> > > > > > > > I've searched the group, and came up empty handed -
>> probably due to
>> > > > > > > > diff keywords.
>>
>> > > > > > > > Cheers.
> > 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Another-HABTM-issue-%3A-row-with-same-Id-getting-over-written-tp19806539p19888332.html
Sent from the CakePHP mailing list archive at Nabble.com.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
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