Я пытаюсь вставить имя пользователя для автора из таблицы пользователей в таблицу сообщений, но это не позволяет мне.Я использую рюкзак для своего CRUD, и я не уверен, что я делаю неправильно.Я также не уверен, почему идентификатор появляется для имени пользователя, а не самого имени пользователя, так как правильные имена пользователей отображаются в поле выбора.Я получаю следующую ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (idf
. posts
, CONSTRAINT posts_author_foreign
ИНОСТРАННЫЙ КЛЮЧ (author
) ССЫЛКИ users
(username
)) (SQL: вставить в значения posts
(title
, content
, author
, updated_at
, created_at
) (aasdasd,
asdasda
, 1, 2018-12-24 04:25:23, 2018-12-24 04:25:23))
Я использую SQL 8, Laravel 5.7 и PHP 7.1.19.До сих пор я пытался очистить кеш с помощью команды artisan и выполнил миграцию: обновить (это нормально, потому что у меня нет законных данных).
В App \ Models \ Post:
protected $table = 'posts';
protected $primaryKey = 'id';
protected $foreignKey = 'author';
public $timestamps = true;
protected $guarded = ['id'];
protected $fillable = [
'title', 'content', 'author'
];
protected $hidden = [];
protected $dates = [];
public function user()
{
return $this->hasOne('App\Models\User');
}
Создание таблицы сообщений:
Schema::create('posts', function (Blueprint $table) {
$table->increments('id')->unique();
$table->string('title')->required();
$table->longtext('content')->required();
$table->string('author');
$table->foreign('author')->references('username')->on('users');
$table->timestamps();
});
Выбрать поле на PostCrudController:
$this->crud->addField([
'label' => "Author",
'type' => 'select2',
'name' => 'author', // the db column for the foreign key
'entity' => 'user', // the method that defines the relationship in your Model
'attribute' => 'username', // foreign key attribute that is shown to user
'model' => "App\Models\User", // foreign key model
'options' => (function ($query) { //limit to only admins
return $query->orderBy('username', 'ASC')->where('admin', 1)->get();
}),
]);
В общем, мне просто нужно разрешить имя пользователя из выпадающего спискадля вставки в столбец автора, который будет именем пользователя для самого пользователя.