簡體   English   中英

Laravel with Eloquent不會在數據庫中保存模型屬性

[英]Laravel with Eloquent doesn't save model properties on database

我正在使用php laravel框架建立一個Web應用程序。 當我在數據庫上保存模型時,它會進行插入但不保存模型屬性。 我無法看到如何解決,因為laravel日志沒有顯示任何錯誤。 任何的想法?

有模型:

/**
 * 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代碼創建User對象並將其保存到數據庫中

<?php

// Create an object using model's constructor
$user = new User('John', 'Doe', 685412578, 9354784125, 'j@doe.com', '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'=>'j@doe.com', 
                        'adress'=>'Portland'
                        ));

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

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

    ?>

http://laravel.com/docs/eloquent#mass-assignment所述 ,您需要為要批量分配的所有屬性設置$fillable屬性。 因此,您應該取消注釋以protected $fillable = ...開頭的行。

您無需在模型本身中指定要為特定模型存儲的列名稱。 ORM的目的之一是從您那里刪除此責任。 您顯然也無法工作,因為Eloquent的getter / setter是在父類中指定的,但是您將屬性本身定義為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;

您不需要在構造函數中指定它們。 您可以使用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' => 'j@doe.com', 'address' => 'Portland']);

$user->save();

模型擴展的Eloquent類無法到達屬性,因為您將它們聲明為private 您既不能直接指定模型上的屬性,也可以將它們聲明為protectedpublic ,然后Eloquent可以訪問它們並能夠將它們保存到數據庫中。

class User extends Model {

    protected $table = 'users';

    public $timestamps = false;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM