Я новичок в Laravel и прохожу курс Laravel 6 с нуля в Laracasts. Курс бесплатный, но я не могу позволить себе членство в Laracasts, поэтому я не могу задавать вопросы там.
Я закончил раздел 6 курса, «Методы контроллера», и у меня возникли непредвиденные проблемы, когда я пытался расширить проделанную нами работу, добавив несколько новых функций. В курсе учащиеся создают страницы, на которых пользователь может показать список статей, просмотреть отдельную статью, создать и сохранить новую статью, а также обновить и сохранить существующую статью. Курсовая работа предусматривала очень простую статью, содержащую только идентификатор (автоматически увеличенный в базе данных и невидимый для веб-пользователя), заголовок, выдержку и текст, и я получил все функции, работающие для этого. Сейчас я пытаюсь добавить два новых поля: имя автора и путь к картинке, иллюстрирующей статью. Я обновил миграцию, откатился и перезапустил миграцию, чтобы включить новые поля, и не получил никаких ошибок. (Я также запустил миграцию: бесплатно и не получил ошибок от этого.) Я также обновил формы, используемые для создания и обновления статей, и добавил проверки для новых полей. Тем не менее, когда я go выполнить пересмотренный код создания, это не удается, потому что SQL неправильно.
В сообщении об ошибке сообщается, что в поле автора не задано значение по умолчанию, и это правда, я не назначил значение по умолчанию. Тем не менее, я дал это значение в форме. Что меня больше всего озадачивает, так это сгенерированный SQL: в списке столбцов нет двух новых столбцов. И это еще не все: в списке значений отсутствуют апострофы вокруг любых строковых / текстовых значений. (Все столбцы определены как строка или текст.)
Как я уже сказал, я совершенно новичок в Laravel, поэтому я не знаю, как убедить Laravel добавить два новых столбца к оператору вставки, ни как заставить его поставить апострофы вокруг строк в списке значений. Это не подошло в курсе, и я не уверен, будет ли это позже. Я надеялся, что кто-нибудь скажет мне, как это исправить. Все мои функции работали нормально до того, как я добавил два новых поля / столбца.
Вот сообщение об ошибке:
SQLSTATE[HY000]: General error: 1364 Field 'author' doesn't have a default value (SQL: insert into `articles` (`title`, `excerpt`, `body`, `updated_at`, `created_at`) values (Today in Canada, The ideal winter-beater, This car is the ideal winter-beater for the tough Canadian climate. It is designed to get you from A to B in style and without breaking the bank., 2020-02-15 17:37:54, 2020-02-15 17:37:54))
Здесь ArticlesController:
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticlesController extends Controller
{
public function index()
{
$articles = Article::latest()->get();
return view ('articles.index', ['articles' => $articles]);
}
public function show(Article $article)
{
return view('articles.show', ['article' => $article]);
}
public function create()
{
return view('articles.create');
}
public function store()
{
//Stores a NEW article
Article::create($this->validateArticle());
return redirect('/articles');
}
public function edit(Article $article)
{
return view('articles.edit', ['article' => $article]);
}
public function update(Article $article)
{
//Updates an EXISTING article
$article->update($this->validateArticle());
return redirect('/articles/', $article->id);
}
public function validateArticle()
{
return request()->validate([
'title' => ['required', 'min:5', 'max:20'],
'author' => ['required', 'min:5', 'max:30'],
'photopath' => ['required', 'min:10', 'max:100'],
'excerpt' => ['required', 'min:10', 'max:50'],
'body' => ['required', 'min:50', 'max:500']
]);
}
public function destroy(Article $article)
{
//Display existing record with "Are you sure you want to delete this? Delete|Cancel" option
//If user chooses Delete, delete the record
//If user chooses Cancel, return to the list of articles
}
}
Есть ли еще что-то, что вам нужно увидеть?