Подтвердить что ты не робот

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": "[email protected]",
  "verification_token": 0,
  "created_at": "2016-01-03 22:27:44",
  "updated_at": "2016-01-03 22:27:44"
}

Итак, первичный ключ контрольного токена/ становится 0.

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

4b9b3361

Ответ 1

Это было добавлено в документацию по обновлению 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;
}

Ответ 3

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

class MyModel extends Model
{
    protected $primaryKey = 'my_column';

    public $incrementing = false;
}

Подробнее см. раздел Primary Keys в документации по Eloquent.

Ответ 4

используйте идентификатор


<?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);