Я пытаюсь использовать электронную почту в качестве основного ключа моей таблицы, поэтому мой красноречивый код –
<?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);