Как Laravel генерирует SQL? - PullRequest
       0

Как Laravel генерирует SQL?

0 голосов
/ 15 февраля 2020

Я новичок в 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
}
}

Есть ли еще что-то, что вам нужно увидеть?

1 Ответ

1 голос
/ 15 февраля 2020

Возможно, из-за того, что вы не определили этот столбец в свойстве fillable, чтобы использовать массовое назначение, необходимо указать эти столбцы.

Попробуйте добавить эти столбцы в свойство fillable .

Laravel массовое назначение

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...