0

kohana フレームワークでアプリケーションを作成していますが、含まれている認証、データベース、および orm kohana モジュールを使用しているユーザー ログイン方法に問題があります。ログインメソッドで sqlite データベースに対して実行された 3 つのクエリがあることに気付きました。

SELECT user.* FROM users AS user WHERE username = 'dejwid' LIMIT 1  
SELECT role.* FROM roles AS role WHERE name = 'login' LIMIT 1
SELECT COUNT(*) AS records_found FROM WHERE user_id = '1' AND role_id IN ('1')

残念ながら、FROMの後のTABLENAMEが欠落しているため、最後のクエリは適切に構築されたクエリではありません(私が思うに)。これは私のモデルで問題になる可能性があるため、モデルのコードを以下に貼り付けます。

APP_PATH/クラス/モデル/user.php:

class Model_User extends ORM
{
    protected $_table_name = 'users';
    protected $_table_columns =  array('user_id','email','username','password','logins','last_login');
    protected $_primary_key = 'user_id';
    protected $_has_many = array('roles'=>array());

    public function unique_key($id = NULL){
        if(!empty($id) && is_string($id) && !ctype_digit($id)){
        return 'username';
        }
        return parent::unique_key($id);
    }
}

APP_PATH/classes/model/role.php :

class Model_Role extends ORM
{
    protected $_table_name = 'roles';
    protected $_table_columns = array('id','name','description');
    protected $_primary_key = 'id';
    protected $_belongs_to = array(
        'users'=>array(),
    );

    public function unique_key($id = NULL){
        if(!empty($id) && is_string($id) && !ctype_digit($id)){
            return 'name';
        }
        return parent::unique_key($id);
    }
}

それが役立つ場合は、このチュートリアルに従おうとしたことを追加したいと思います。
私の質問は: なぜtablename最後のクエリにないのですか?

4

1 に答える 1

1
protected $_has_many = array('roles'=>array('through' => 'roles_users'));

または、代わりに任意のテーブル名roles_users

于 2013-08-20T10:24:12.583 に答える