4

query.phpの一部のメソッドにidは列としてハードコードされているため、Laravelの一部のクエリで問題が発生しました。したがって、データベースでid以外の名前を使用すると、これらの関数は無残に失敗します。

私の場合、既存のMSSQLデータベースがあり、ユーザーテーブルのID列はそうではありUserIdませんid。私の場合、問題はユーザーがログインした後に発生します-スクリプトは次のようにバーフします:

SELECT TOP 1 [userid] FROM [User] WHERE [id] = ?

Fluentは、ユーザーデータを取得しようとすると、query.phpにあるこれらの問題のある関数の1つを呼び出すようです。誰かがこの問題に対処しましたか?もしそうなら、どのように対処しましたか?

アップデート:

Auth::check()FluentをAuthドライバーとして使用していますが、またはを実行するとエラーがトリガーされますAuth::guest()。スタックトレースは次のようになります。

#0 C:\laravel\database\connection.php(183): Laravel\Database\Connection->execute('SELECT TOP 1 [u...', Array)
#1 C:\laravel\database\query.php(709): Laravel\Database\Connection->query('SELECT TOP 1 [u...', Array)
#2 C:\laravel\database\query.php(653): Laravel\Database\Query->get(Array)
#3 C:\laravel\database\query.php(624): Laravel\Database\Query->first(Array)
#4 C:\laravel\auth\drivers\fluent.php(21): Laravel\Database\Query->find('162')
#5 C:\laravel\auth\drivers\driver.php(79): Laravel\Auth\Drivers\Fluent->retrieve('162')
#6 C:\laravel\auth\drivers\driver.php(65): Laravel\Auth\Drivers\Driver->user()
#7 C:\laravel\auth\drivers\driver.php(55): Laravel\Auth\Drivers\Driver->check()
4

2 に答える 2

5

あなたの問題には2つの解決策があります:

  1. Eloquentを使用しないでください(あなたの質問から、それがあなたが使用していたものであると推測しました)。代わりに、Fluentを使用してください。

    $users = DB::table('users')->where('UserId', '=', 1)->first();
    

    このアプローチには制限があり、Eloquentを使用できなくなります。

  2. モデルを次のように定義します。

    class User extends Eloquent {
        public static $key  = 'UserId';
        public static $table = 'users';
    }
    

    ここ$keyで、は主キー$tableの名前であり、はテーブルの名前です(モデル名の複数形でない場合に便利です)。これは素晴らしいと思いますが、残念ながら、リレーションシップを使用する場合は十分ではない可能性があります。詳細については、この回避策をご覧ください。

于 2013-01-22T22:12:41.423 に答える
0

Laravel 4. *では、カスタムIDは次のように再定義する必要があります

class User extends Eloquent {
    protected $primaryKey = "UserID";
}
于 2014-10-29T11:14:26.923 に答える