1
votes

I'm getting the most bizzare "Unknown Column '0'" error as I try and implement a Laravel model.

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `users` where `username` = smithjd and `0` = 1 limit 1)

All the other data in my application is API driven, but I thought it might be easier to have user authentication and management done through the built in ORM.

I've got MySQL set up with a users table:

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| remember_token | varchar(100) | YES  |     | NULL    |                |
| username       | varchar(100) | YES  |     | NULL    |                |
| password       | varchar(100) | YES  |     | NULL    |                |
| first_name     | varchar(100) | YES  |     | NULL    |                |
| last_name      | varchar(100) | YES  |     | NULL    |                |
| email          | varchar(100) | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

And here is the model - It hasn't really been changed from the default:

use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

    protected $fillable = array('email', 'username', 'password', 'first_name', 'last_name');

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password');

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the token value for the "remember me" session.
     *
     * @return string
     */
    public function getRememberToken()
    {
        return $this->remember_token;
    }

    /**
     * Set the token value for the "remember me" session.
     *
     * @param  string  $value
     * @return void
     */
    public function setRememberToken($value)
    {
        $this->remember_token = $value;
    }

    /**
     * Get the column name for the "remember me" token.
     *
     * @return string
     */
    public function getRememberTokenName()
    {
        return 'remember_token';
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }

}

And here is how I'm trying to use it

$user_data = Input::all();
Auth::attempt(array('username' => $user_data['username'], 'password' => $user_data['password']));

I've never tried to implement a built in model in Laravel before, and I could use some assistance with this. Can anyone point me in the right direction?

1
So what is the exact mysql query executed? - zerkms
Don't wrap the 0 in backticks, otherwise it's interpreted as a column name. - cmbuckley
Looks bizarre indeed. Can you paste the stacktrace for the error "SQLSTATE[42S22]: Column not found..." too? - Unnawut

1 Answers

2
votes

Why don't you var_dump the Input::only('username', 'password'); so you can check that Laravel has really access to your credentials. There is an issue with the password Laravel tries to get from your form. Use sth like this to test and step forward:

$credentials = Input::only('username', 'password');

return var_dump($credentials);

if(Auth::attempt($credentials))
{
    return Redirect::intended('/someurl');
}

return Redirect::back()->withInput();