0
votes

I'm new to CakePHP and I'm stuck in reading a Model using other fields. I did a cake bake command to generate a simple users CRUD. I can view the user using the url CakePHP provided.

/users/view/1

I can view the user using id = 1. What if I want to view a user by name instead of id?

/users/view/username

By default the view function reads the User model by id.

$this->User->read(null, $id)

Thank you.

3

3 Answers

1
votes

you can use find function or findBy<Field>() in your case findByUsername()

check this

0
votes

I've never used cakePHP myself but I'm going to suggest that you will likely have to implement a new user model method, something like getUserByUsername($username) This would then in turn interface with your DAL that would get the details of that user based on the username and return a user object that can be used however you wish...

0
votes

It seems that CakePHP is focusing to deprecate some functions, such as findAll(). Perhaps soon the magic methods such as findBy<field>() will have the same fate.

I can recommend what martswite is suggesting, you should create your custom function:

function findUser($username=''){
    return $this->find('first', array(
        'conditions' => array(
            'User.username' => $username
        )
    ));
}

Perhaps you have a status field, maybe the profile isn't public, you can add a condition:

function findUser($username=''){
    return $this->find('first', array(
        'conditions' => array(
            'User.username' => $username,
            'User.status' => 1
        )
    ));
}

I think that's more modular than findBy<Field>.