2014-09-10 4 views
3

Я создаю веб-приложение с использованием php laravel framework. Когда я сохраняю модель в базе данных, она вставляет, но не сохраняет свойства модели. Я не могу понять, как исправить, потому что журнал laravel не показывает никакой ошибки. Есть идеи?Laravel with Eloquent не сохраняет свойства модели в базе данных

Там же модель:

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'test'; 
// protected $fillable = array('name', 'surname', 'mobile', 'phone', 'mail', 'adress'); 

// Model properties 
private $name; 
private $surname; 
private $mobile; 
private $phone; 
private $mail; 
private $adress; 

// Model constructor 
function __construct($name, $surname, $mobile, $phone, $mail, $adress) { 
    $this->name = $name; 
    $this->surname = $surname; 
    $this->mobile = $mobile; 
    $this->phone = $phone; 
    $this->mail = $mail; 
    $this->adress = $adress; 
} 

И есть PHP код, который создать объект пользователя и сохранить его в базу данных

<?php 

// Create an object using model's constructor 
$user = new User('John', 'Doe', 685412578, 9354784125, '[email protected]', 'Portland'); 

// Show some properties 
echo '<p>'.$user->getName().'</p>'; 
echo '<p>'.$user->getSurname().'</p>'; 

// Saving model on database 
$user->save(); 

?> 

Когда я выполнить PHP-код отображается на экране свойств модели и марки вставка, но не сохраняет свойства. Было бы замечательно, если бы кто-то может помочь мне :)


Там в это решение (если кто-то имеет такую ​​же проблему или аналогичный)

Модель:

protected $table = 'test'; 

    // Fields on databse to save model properties 
    protected $fillable = array('name', 'surname', 'mobile', 'phone', 'mail', 'adress'); 

    // Model properties 
    private $name; 
    private $surname; 
    private $mobile; 
    private $phone; 
    private $mail; 
    private $adress; 

И код PHP:

<?php 

     // Create an object 
        $user = User::create(array(
         'name'=>'John', 
         'surname'=>'Doe', 
         'mobile'=>685412578, 
         'phone'=>9354784125, 
         'mail'=>'[email protected]', 
         'adress'=>'Portland' 
         )); 

     // Show some properties 
     echo '<p>'.$user->name.'</p>'; 
     echo '<p>'.$user->surname.'</p>'; 

     // Saving model on database 
     $user->save(); 

    ?> 
+0

Благодарим вас, что у вас есть права, сейчас работает. Большое спасибо! – proktovief

ответ

2

Как описано в http://laravel.com/docs/eloquent#mass-assignment, вам необходимо установить $fillable для всех свойств, которые вы хотите присвоить массе. Поэтому вы должны раскомментировать строку, начинающуюся с protected $fillable = ....

0

Вам не нужно указывать имена столбцов, которые вы храните для конкретной модели в самой модели. Одной из целей ORM является удаление этой ответственности от вас. То, что у вас также, очевидно, не будет работать, потому что получатели/сеттеры Eloquent указаны в родительском классе, но у вас есть сами свойства, определенные как private, который недоступен из любой области родителя/ребенка.

Мое предложение: полностью удалить эти строки из вашей модели:

private $name; 
private $surname; 
private $mobile; 
private $phone; 
private $mail; 
private $adress; 

Удалите конструктор в там. Если вы хотите создать экземпляр и сохранить его в базе данных, вы можете сделать это:

$user = User::create(array(
    'name' => 'John', 
    'surname' => 'Doe', 
    // ... etc 
)); 

А позже вы можете легко получить доступ к свойствам этого экземпляра:

echo $user->name; 
1

Вам не нужно чтобы указать их в конструкторе. Вы можете использовать mass-assignment.

Модель:

class User extends Eloquent { 

protected $fillable = ['name', 'suname', 'mobile', 'phone', 'mail', 'address']; 

} 

Контроллер:

$user = new User(['name' => 'John', 'surname' => 'Doe', 'mobile' => '685412578', 'phone' => '9354784125','mail' => '[email protected]', 'address' => 'Portland']); 

$user->save(); 
0

Eloquent класс, ваши модели расширения не могут достичь свойства, потому что вы объявлять их private.Вы не можете напрямую указывать свойства модели, или можете объявить их как protected или public, тогда Eloquent будет иметь к ним доступ и сможет сохранить их в вашей базе данных.

0
class User extends Model { 

    protected $table = 'users'; 

    public $timestamps = false; 

} 
+1

закрыть отметки времени – user5761094

+0

Пожалуйста, объясните свой ответ. –

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