Laravel 5.2 – Используйте строку в качестве настраиваемого основного ключа для ярко выраженной таблицы. 0

Я пытаюсь использовать электронную почту в качестве основного ключа моей таблицы, поэтому мой красноречивый код –

<?php namespace App; use Illuminate\Database\Eloquent\Model; class UserVerification extends Model { protected $table = 'user_verification'; protected $fillable = [ 'email', 'verification_token' ]; //$timestamps = false; protected $primaryKey = 'verification_token'; } 

И моя БД похожа на это –

введите описание изображения здесь

но если я это сделаю,

 UserVerification::where('verification_token', $token)->first(); 

Я получаю это –

 { "email": "sdfsdf@sdfsdf.sdf", "verification_token": 0, "created_at": "2016-01-03 22:27:44", "updated_at": "2016-01-03 22:27:44" } 

Таким образом, токен проверки / первичный ключ становится 0.

Кто-нибудь может помочь?

Это было добавлено к документации по обновлению 29 декабря 2015 года , поэтому, если вы обновили ее до этого, вы, вероятно, пропустили ее.

При извлечении любого атрибута из модели он проверяет, должен ли этот столбец быть отличен как целое число, строка и т. Д.

По умолчанию для таблиц с автоматическим приращением идентификатор считается целочисленным в этом методе:

https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L2790

Таким образом, решение:

 class UserVerification extends Model { protected $primaryKey = 'your_key_name'; // or null public $incrementing = false; } 

О наборе модели $incrementing false

 public $incrementing = false; 

Это остановит его, если подумать, что это поле автоматического прироста.

Laravel Docs – Красноречивый – Определение моделей

Theres два свойства на модели, которую вы должны установить. Первый $primaryKey чтобы рассказать модели, в какой колонке ожидается первичный ключ. Второй $incrementing поэтому он знает, что первичный ключ не является линейным автоматически увеличивающимся значением.

 class MyModel extends Model { protected $primaryKey = 'my_column'; public $incrementing = false; } 

Для получения дополнительной информации см. Раздел « Primary Keys » в документации по Eloquent .

продолжать использовать идентификатор


 <?php namespace App; use Illuminate\Database\Eloquent\Model; class UserVerification extends Model { protected $table = 'user_verification'; protected $fillable = [ 'id', 'email', 'verification_token' ]; //$timestamps = false; protected $primaryKey = 'verification_token'; } 

и получите электронное письмо:

  $usr = User::find($id); $token = $usr->verification_token; $email = UserVerification::find($token);