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.
Кто-нибудь может помочь?
Ответы
Ответ 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;
}
Ответ 2
В наборе моделей $incrementing
значение false
public $incrementing = false;
Это перестанет думать, что это поле автоматического приращения.
Laravel Docs - Красноречивый - Определение моделей
Ответ 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);