2017-12-21 12 views
-1

を返す私は、id列がuser_idを命名されているデータベースで働いています。LaravelのPrimaryKeyオーバーライド無視 - クエリー不明列エラー

私は、ユーザーモデルで$ PRIMARYKEYオーバーライドを設定しましたが、それはまだidを探しています。ユーザーモデルがAuthenticatableを拡張するときに表示されますが、無視されます。認証可能なものはモーダルを拡張するので、問題ではないはずです。

私は主キーのオーバーライドが動作していないスレッドをたくさん見てきましたが、何も助けませんでした。

エラーアクセスするユーザー:

Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `members` where `email` = [email protected] and `id` <> 1804) 

ユーザーモデル:

namespace App; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    protected $table = 'members'; 

    protected $primaryKey = 'user_id'; 

アップデート生産エラー:

public function rules() 
{ 
    $user = Auth::user(); 
    return [ 
     'email' => [ 
      'required', 
      'email', 
      Rule::unique($user->getTable())->ignore($user->getKey()), 
     ], 
     'first_name' => 'required', 
     'last_name' => 'required', 
    ]; 
} 

DBカラム:

Name | Type | Attributes | Null | Extra 
user_id (PrimaryKey) | int(60) | Unsigned | No | AUTO_INCREMENT 
+0

エラーを生成するコードを表示してください。 –

+0

データベースから 'column type'を見ることはできますか?私はあなたが示されてきたクエリーは、電子メール= [email protected]メンバーから集約し、IDとしてこのSQL 'SELECT COUNT(*)を生成しているとは思わない – Ohgodwhy

+1

@Klav <> 1804' –

答えて

3

sqlステートメントは、一意の検証ルールが生成するもののように見えます。 idでない場合は、主キーを指定する構文があります。

If your table uses a primary key column name other than id, you may specify the name of the column when calling the ignore method:

'email' => Rule::unique('users')->ignore($user->id, 'user_id') 

出典:https://laravel.com/docs/5.5/validation#rule-unique、「与えられたIDを無視するユニークなルールの強制」の規定に基づきます。

+1

OPが自分の質問に検証コードを追加する1分前にOPの検証コードで回答を投稿したのは面白いです。 –

+0

ありがとうございました。ですから、このテーブルにルールが使用されているどこにでもこのユニークなルールを追加する必要がありますか? – Klav

関連する問題