2015-04-21 2 views
9

ПервыеСохранение данных в базе данных в Laravel 5

Я написал сценарий миграции.


Второй

Я бегу php artisan migrate перенести таблицу в моей базе данных.


Database

Теперь у меня есть subscribes таблицу в моей базе данных. Имеет 2 поля: id и email.

enter image description here


Маршрут

Route::post('/subscribe', array('as' =>'subscribe','uses'=>'[email protected]'));


Модель

<?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); 
    } 

} 

Контроллер

<?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.'); 

     } 
} 

?> 

Ошибка

enter image description here


Вопросы

Почему я не могу сделать $subscribe = new Subscribe;?

Какова наилучшая практика для Вставить данные в базу данных с помощью Laravel 5?


Update

Благодаря @Mark Бейкер. Кажется, что у меня проблема с моим пространством имен.

Этот намблинг немного запутанный для меня прямо сейчас. Может кто-нибудь , пожалуйста, уточнить или объяснить это немного?

Все, что ценится.

Заранее спасибо.

+2

Модель вашей подписки находится в пространстве имен 'App'; вы не упоминаете пространство имен для своего контроллера: так что, возможно, '$ subscribe = new \ App \ Подписаться;' –

+0

Похоже, что он исправляет мою проблему. : D. Как исправить это, если я не хочу использовать '\ App \' перед моей подпиской. – ihue

+0

Если вы не хотите объявлять пространство имен каждый раз, когда вы создаете экземпляр модели Subscribe, то не используйте это пространство или не устанавливайте 'use' в верхней части вашего контроллера –

ответ

8

Вот краткий обзор того, как пространства имен работают на PHP, чтобы попытаться помочь вам понять это и дать вам решение вашей проблемы.

<?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. 
    } 
} 
+0

Этот ответ помогает мне понять намного больше об именах. Спасибо. – ihue

1

Вы можете попробовать это, просто использовать:

$subscribe  = new App\Subscribe; 
+0

Посмотрите первый комментарий, @Mark уже предложил мне это. – ihue

0

Использование App\Subscribe;.

Тогда вы можете использовать $subscribe = new Subscribe; в своем коде.

Смежные вопросы