In your add function in the books_controller, you need to populate the $authors 
variable:

$authors = $this->Book->Author->find('list');

Then make sure the variable is passed into the view:

$this->set(compact('authors'));

or

$this->set('authors, $authors);

(they both do the same thing - use the first version if you have more than one 
variable to set and pass)

Then if you are using the Form helper to build your form, you should have this:

echo $this->Form->input('author_id');

When Cake draws the author_id input, it will check to see if there is a 
variable that matches (author_id => $authors, book_id => $books, anything_id => 
$anythings - you can follow the pattern). If it finds one (in your case 
$authors) it will assume you want author_id to be a select list, so will use 
the $authors variable as the options.

You can embellish the input further by adding other options, e.g.:

echo $this->Form-input(
        'author_id',
        array(
                'empty' => true 
        )
);

The empty option means that no value is already selected in the list; by 
default the first option value (your first author) is pre-populated. You can 
also do:

'empty' => 'Please choose an author'

Jeremy Burns
Class Outfit

[email protected]
http://www.classoutfit.com

On 12 Oct 2010, at 17:59, Ashwani Kumar wrote:

> Hi jeremy! Thanx for the reply. I deleted all files from cakephp except 
> authors_controller and books_controller and then i added var $scaffold in 
> both the files and also deleted all functions from both files. Then i added 
> some authors. Now at the time of adding books, Author field should be a Drop 
> down menu. But its not happening in my case. Author field is just a Text 
> field here in my case. If you could explain why this is happening? is this an 
> issue with my cakephp version of what?? By the way i'm using CakePHP 1.3 
> 
> On Tue, Oct 12, 2010 at 8:13 PM, Jeremy Burns | Class Outfit 
> <[email protected]> wrote:
> I wish I had a dollar for every time I have given this response!
> 
> I would use the Containable behaviour, which will give you really fine 
> control over what data you get back. It effectively replaces 'recursive'. The 
> problem with recursive is that it gives you all data within n steps of the 
> current model, rather like rings on an onion. That can be too much data and 
> doesn't offer much control.
> 
> In your app_model:
> 
> var $actsAs = array('Containable');
> var $recursive = -1;
> 
> Now every model find will only bring back 'this' model, unless you 
> specifically ask it to bring back more. Alternatively, you can place that 
> code into selected models if you want to restrict its use, but once you get 
> to grips with it you'll use it everywhere.
> 
> Now your find becomes:
> 
> $authors = $this->Author->find(
>       'all',
>       array(
>               'contain' => array('Book')
>       )
> );
> 
> Then use the $authors variable as you already are. You should find that it 
> now includes array keys for books belonging to each author.
> 
> If you want to bring back just one author:
> 
> $author = $this->Author->find(
>       'first',
>       array(
>               'contain' => array('Book'),
>               'conditions' => array('Author.id' => $id)
>       )
> );
> 
> (where $id is the id of the author you are searching for)
> 
> If books had publishers, you can bring their information back too:
> 
> $authors = $this->Author->find(
>       'all',
>       array(
>               'contain' => array(
>                       'Book' => array(
>                               'Publisher'
>                       )
>               )
>       )
> );
> 
> You can see that by adding elements within the contain key you are extending 
> your reach and getting back more data, but in a very controlled way.
> 
> I hope that helps.
> 
> Jeremy Burns
> Class Outfit
> 
> [email protected]
> http://www.classoutfit.com
> 
> On 12 Oct 2010, at 15:31, Ashwani Kumar wrote:
> 
>> Hi again! 
>> 
>> I'm getting some issue in getting associated array. as you know that when we 
>> fetch some data from a model that's associated with another model via 
>> $hasMany or $belongsTo, we also get data of that associated mode. But i'm 
>> not getting data of that associated model.  I've two tables :
>> authors
>>        - id
>>        - name
>>        - email
>>        - website
>> 
>> books
>>        - id
>>        - isbn
>>        - title
>>        - description
>>        - author_id
>> 
>> When i fetch fetch authors data i dont' get data of books in result array. 
>> 
>> controllers/authors_controller.php
>> 
>> <?php
>>        class AuthorsController extends AppController {
>>                var $name = 'Authors';
>> 
>>                function index() {
>>                        $this->Author->recursive = 1;
>>                        $authors = $this->Author->find('all');
>>                        $this->set('authors', $authors);
>>                }
>>        }
>> 
>> controllers/books_controllers.php
>> 
>> <?php
>>        class BooksController extends AppController {
>>                var $name = 'Books';
>> 
>>                function index() {
>>                        $this->Book->recursive = 1;
>>                        $books = $this->Book->find('all');
>>                        $this->set('books', $books);
>>                }
>>        }
>> 
>> models/authors.php
>> 
>> <?php
>>        class Author extends AppModel {
>>                var $name = 'Author';
>>                var $hasMany = array('Book');
>>        }
>> 
>> models/books.php
>> 
>> <?php
>>        class Book extends AppModel {
>>                var $name = 'Book';
>>                var $belongsTo = array('Author');
>>        }
>> 
>> books
>> id      isbn    title           description             author_id
>> 1       12345   book1           asdfasdfasdf                    1
>> 2       book2   asdfasfasdf ag as sadfas dfsdaf         1
>> 3       345345  dfgvsdf         gsdgsdf sdfg sdfg dfg   2
>> 
>> authors
>> 
>> id      name                            email                                
>>            website
>> 1       Sams Publication        [email protected]       
>> http://www.samspublications.com
>> 2       Test Author             [email protected]          
>> http://www.author1.com
>> 
>> 
>> 
>> 
>> When i try to run print '<pre>'; print_r($authors), i get following
>> array :
>> 
>> Array
>> (
>>    [0] => Array
>>        (
>>            [Author] => Array
>>                (
>>                    [id] => 1
>>                    [name] => Sams Publication
>>                    [email] => [email protected]
>>                    [website] => http://www.samspublications.com
>>                )
>> 
>>        )
>> 
>>    [1] => Array
>>        (
>>            [Author] => Array
>>                (
>>                    [id] => 2
>>                    [name] => Test Author
>>                    [email] => [email protected]
>>                    [website] => http://www.author1.com
>>                )
>> 
>>        )
>> 
>> )
>> 
>> So, my problem is that there's no Book array in above array. Please
>> help... Thanks in advance.
>> 
>> Check out the new CakePHP Questions site http://cakeqs.org and help others 
>> with their CakePHP related questions.
>>  
>> 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
> 
> 
> Check out the new CakePHP Questions site http://cakeqs.org and help others 
> with their CakePHP related questions.
>  
> 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
> 
> 
> Check out the new CakePHP Questions site http://cakeqs.org and help others 
> with their CakePHP related questions.
>  
> 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

Check out the new CakePHP Questions site http://cakeqs.org and help others with 
their CakePHP related questions.

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