我正在使用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();
?>
答案 0 :(得分:2)
如http://laravel.com/docs/eloquent#mass-assignment所述,您需要为要批量分配的所有属性设置$fillable
属性。因此,您应该取消注释以protected $fillable = ...
开头的行。
答案 1 :(得分:1)
您不需要为模型本身中的特定模型指定要存储的列名。 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;
答案 2 :(得分: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' => 'j@doe.com', 'address' => 'Portland']);
$user->save();
答案 3 :(得分:0)
模型扩展的Eloquent
类无法访问属性,因为您将其声明为private
。您既不能直接在模型上指定属性,也可以将它们声明为protected
或public
,然后Eloquent可以访问它们并能够将它们保存到您的数据库中。
答案 4 :(得分:0)
class User extends Model {
protected $table = 'users';
public $timestamps = false;
}