Laravel, как добавить записи с функцией создания в контроллере? - PullRequest
0 голосов
/ 24 июня 2019

NewsController.php

Это контроллер, и я использую функцию создания, чтобы добавить запись в базу данных, но когда я добавлю все записи будут пустыми

public function insertNews() {
    $attribute = [
        'Ntitle'   => 'News Title',
        'Ndesc'    => 'News Description',
        'Naddedby' => 'News Added By',
        'Ncontent' => 'News Content',
        'Nstatus'  => 'News Status'
    ];
    $data = $this->validate(request(), [ 
        'Ntitle'   => 'required',
        'Ndesc'    => 'required',
        'Naddedby' => 'required',
        'Ncontent' => 'required',
        'Nstatus'  => 'required'
    ], [], $attribute);
    News::create($data);
    return redirect('all/news');
}

и я использую dd (), чтобы показать запись, и она будет отображаться с токеном и всеми другими значениями

dd(request()->all()) 

news.php и это файл модели

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

    class News extends Model
    {
        use SoftDeletes;
        protected $primaryKey = 'News_ID';
        protected $date       = ['delete_at'];
        protected $fillable = ['News_Title', 'News_Descrption', 'News_Content', 'Added_By', 'News_Status'];
    }

web.php это веб-файл (маршруты)

Route::post('insert/news', 'NewsController@insertNews');

news.blade.php

и это блейд-файл, содержащий форму, которую я отправил контроллеру

<form action="{{ url('insert/news') }}" method="POST">
    {{ csrf_field() }}
    <input type="text" name="Ntitle" value="{{ old('Ntitle') }}" placeholder="News Title"><br />
    <input type="text" name="Ndesc" value="{{ old('Ndesc') }}" placeholder="News Descrption"><br />
    <input type="number" name="Naddedby" value="{{ old('Naddedby') }}" placeholder="News Added By"><br />
    <textarea name="Ncontent" value="{{ old('Ncontent') }}" placeholder="News Content"></textarea><br />
    <select name="Nstatus">
        <option value="Active" {{ old('Nstatus') == 'Active' ? 'selected' : '' }}>Active</option>
        <option value="Pending" {{ old('Nstatus') == 'Pending' ? 'selected' : '' }}>Pending</option>
        <option value="Disabled" {{ old('Nstatus') == 'Disabled' ? 'selected' : '' }}>Disabled</option>
    </select><br />
    <input type="submit" value="Add News">
</form>

введите описание изображения здесь

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Существует ряд причин, по которым ваш код не работает:

  1. В вашем случае вы неправильно приравняли $ data к объекту проверки. Вы должны использовать атрибут $ (массив значений ключа данных, а не объект проверки) в функции create вместо $ data.
  2. Во-вторых, ключи, передаваемые в массиве данных создания, должны быть точно такими же, как и имена полей таблицы, которую вы используете для вставки данных. Я вижу, что ваш код показывает, что Ntitle, Ndesc и т. Д. Используются для проверки и в массиве атрибутов $, в то время как $ fillable, защищенный для заполнения, имеет разные имена полей! Поэтому, пожалуйста, используйте правильные имена полей в данных, которые вы передаете, и в $ fillable в модели. Я пишу код ниже, предполагая, что Ntitle, Ndesc, Naddedby, Ncontent, Nstatus являются именами полей вашей таблицы. Для этого, пожалуйста, обратитесь к приведенному ниже коду!

public function insertNews() {
                $attribute = [
                    'Ntitle'   => 'News Title',
                    'Ndesc'    => 'News Description',
                    'Naddedby' => 'News Added By',
                    'Ncontent' => 'News Content',
                    'Nstatus'  => 'News Status'
                ];
                $this->validate(request(), [ 
                    'Ntitle'   => 'required',
                    'Ndesc'    => 'required',
                    'Naddedby' => 'required',
                    'Ncontent' => 'required',
                    'Nstatus'  => 'required'
                ], [], $attribute);
                News::create($attribute);
                return redirect('all/news');
            }

Убедитесь, что у вас есть все поля, добавленные в защищенный $ fillable = []; в вашей модели вот так:

class News extends Model {

    protected $fillable = [
      'Ntitle', 'Ndesc', 'Naddedby', 'Ncontent', 'Nstatus'
    ];
0 голосов
/ 24 июня 2019

Могу ли я получить ваш веб-маршрут?так что я могу сказать, что в этом ошибка,

я думаю, что ваш маршрут должен быть

Route::namespace('your_Controller_Foldername')->group(function () {

 Route::resource('insert/news', 'NewsController');

 });
0 голосов
/ 24 июня 2019

Вам необходимо передать значение методу create ().

//Passing the request to create method
    News::create($request->all());
    return redirect('all/news');

Теперь будет храниться, если вы добавили имя входных данных в переменную $ fillable в модели News.

//News.php (Model)
protected $fillable = ['Ntitle', 'Ndesc', 'Naddedby', 'Ncontent', 'Nstatus'];

Я предпочитаю использовать

//News.php (Model)
protected $guarded = [];
...