It's easy, really - for each of the 3 fields (keyPath, valuePath and groupPath), instead of passing a string, you can pass an array.
The first entry in the array is the format string, the rest are the parameters (extracted with Set::extract()). The format is exactly the same as sprintf() [it calls vsprintf() internally]. So, passing array('%s %s', '{n}.Person.firstname', '{n}.Person.surname') as the valuePath does the following: * realizes it's an array, not a string * grabs the first entry ('%s %s') for the format, remembers the rest as parameters * for each parameter, calls Set::extract($data, ...) : + Set::extract($data, '{n}.Person.firstname'); + Set::extract($data, '{n}.Person.last'); * calls vsprintf($format, $parameters) You can also use "{1} {2}" as the format string instead of the sprintf() format, if you like. Personally I prefer the sprintf format, because I'm more used to it. Plus you can do things like padding, truncating and whatnot: Slightly more complicated example: $data = array( array('User' => array('id' => 1, 'firstname' => 'Joe', 'surname' => 'Bloggs')), array('User' => array('id' => 2, 'firstname' => 'Fred', 'surname' => 'Bloggs')), array('User' => array('id' => 3, 'firstname' => 'Jim', 'surname' => 'Beam')), array('User' => array('id' => 4, 'firstname' => 'Jack', 'surname' => 'Daniels')), ); debug(Set::combine( $data, '{n}.User.id', array('%2$s, %1$.1s.', '{n}.User.firstname', '{n}.User.surname'), '{n}.User.surname.0' )); result: Array ( [B] => Array ( [1] => Bloggs, J. [2] => Bloggs, F. [3] => Beam, J. ) [D] => Array ( [4] => Daniels, J. ) ) neat, no? On Feb 11, 4:36 pm, Baz <[EMAIL PROTECTED]> wrote: > Yeah, I've seen that a lot. > > What I was referring to with grigri's example is that : > > array(%s %s %s) thing for the path... > > I have tons of examples like these where I need to do a "$firstname - > $lastname" type of thing. > > On Feb 11, 2008 10:22 AM, Samuel DeVore <[EMAIL PROTECTED]> wrote: > > > > > there is the start of some information on Set:: at > > >http://www.thinkingphp.org/2007/02/24/cake-12s-set-class-eats-arrays-... > > > Sam D > > > On Feb 11, 2008 9:04 AM, Baz <[EMAIL PROTECTED]> wrote: > > > Are you serious????? > > > > Ok, you guys need a Set::combine tutorial or something! > > > > I've been trying to figure this out how to combine fields for a few > > months > > > now. I've been reduced to creating a custom array in a foreach loop. > > > > But I knew, deep down inside, there must be way. ThanX > > > -- > > > Baz L > > > Web Development 2.0 > > >http://WebDevelopment2.com/ > > > > On Feb 11, 2008 3:59 AM, roryy <[EMAIL PROTECTED]> wrote: > > > > > It works, thank you very much! > > > > Now i'm gonna try to make a function to combine the two functions :) > > > > > On 11 feb, 10:41, grigri <[EMAIL PROTECTED]> wrote: > > > > > find('list') only works with simple fields, you won't be able to do > > > > > this. > > > > > > Still, it's easy enough with find('all') and Set::combine(): > > > > > > $people = $this->Person->find('all', array( > > > > > 'fields' => array('id', 'firstname', 'insertion', 'surname'), > > > > > 'recursive' => -1 > > > > > )); > > > > > $list = Set::combine( > > > > > $people, > > > > > '{n}.Person.id', > > > > > array('%s %s %s', '{n}.Person.firstname', '{n}.Person.insertion', > > > > > '{n}.Person.surname') > > > > > ); > > > > > > On Feb 11, 9:25 am, roryy <[EMAIL PROTECTED]> wrote: > > > > > > > Hello cakephp friends, > > > > > > > I have 2 tables. Communications and people. In communications/add > > i > > > > > > want a list where you can choose one person from table people. But > > you > > > > > > don't see his name, only his ID. I have these fields in table > > people: > > > > > > > id > > > > > > firstname > > > > > > insertion > > > > > > surname > > > > > > > Can someone help me to make a list where you can see a persons > > > > > > firstname, insertion and surname with find('list' , .....) in the > > > > > > communication controller. > > > > > > > Thanks in advance!- Tekst uit oorspronkelijk bericht niet > > weergeven - > > > > > > - Tekst uit oorspronkelijk bericht weergeven - > > > -- > > -- > > (the old fart) the advice is free, the lack of crankiness will cost you > > > - its a fine line between a real question and an idiot > > >http://blog.samdevore.com/archives/2007/03/05/when-open-source-bugs-me/ > >http://blog.samdevore.com/cakephp-pages/my-cake-wont-bake/ > >http://blog.samdevore.com/cakephp-pages/i-cant-bake/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" 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 -~----------~----~----~----~------~----~------~--~---