web-dev-qa-db-fra.com

Enregistrer les données dans la base de données dans Laravel 5

Premier

J'ai écrit un script de migration.


Seconde

J'exécute le php artisan migrate pour migrer la table dans ma base de données.


Base de données

Maintenant, j'ai une table subscribes dans ma base de données. Il comporte 2 champs: id et email.

enter image description here


Itinéraire

Route::post('/subscribe', array('as' =>'subscribe','uses'=>'AccountController@postSubscribe'));


Modèle

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;

class Subscribe extends Model {

    protected $table = 'subscribes';


    //Validation Rules and Validator Function
    public static function validator($input){

        $rules = array(
            'email'    =>'required|email'
        );

        return Validator::make($input,$rules);
    }

}

Manette

<?php namespace App\Http\Controllers;

use Input, Validator, Auth, Redirect;

class AccountController extends Controller {

    public function postSubscribe() {

            $subscribe        = new Subscribe; <-------- Line#46 (BUG HERE)
            $subscribe->email = Input::get('email');
            $subscribe->save();

            dd("Hi");

            return Redirect::to('/')
                ->with('success','You have been successfully subscribe to us.');

        }
}

?>

Erreur

enter image description here


Des questions

Pourquoi je ne peux pas faire $subscribe = new Subscribe;?

Quelle est la meilleure pratique pour insérer data dans la base de données en utilisant Laravel 5?


Mettre à jour

Merci à Mark Baker. Il semble que j'ai un problème avec mon espace de noms.

Ce nom d'espacement est un peu déroutant pour moi en ce moment. Est-ce que quelqu'un s'il vous plaît peut clarifier ou expliquer cela?

Tout est apprécié.

Merci d'avance.

9
kyo

Voici un aperçu détaillé du fonctionnement des espaces de nom dans PHP pour vous aider à comprendre cela et vous proposer une solution à votre problème.

<?php

// This is the namespace of this file, as Laravel 5 uses PSR-4 and the
// App namespace is mapped to the folder 'app' the folder structure is
// app/Http/Controllers
namespace App\Http\Controllers;

// Use statements. You can include classes you wish to use without having
// to reference them by namespace when you use them further on in this
// namespaces scope.
use App\Subscribe;

class MyController extends BaseController 
{
    public function postSubscribe()
    {
        // You can now use the Subscribe model without its namespace
        // as you referenced it by its namespace in a use statement.
        $subscribe = new Subscribe();

        // If you want to use a class that is not referenced in a use
        // statement then you must reference it by its full namespace.
        $otherModel = new \App\Models\Other\Namespace\OtherModel();

        // Note the prefixed \ to App. This denotes that PHP should get this
        // class from the root namespace. If you leave this off, you will
        // reference a namespace relative to the current namespace.
    }
}
8
David Barker

Vous pouvez essayer ceci, utilisez-le simplement:

$subscribe        = new App\Subscribe;
1
Inspire Shahin

Utilisez App\Subscribe;.

Ensuite, vous pouvez utiliser $subscribe = new Subscribe; dans votre code.

0
Alp Altunel