【问题标题】:Laravel model inheritanceLaravel 模型继承
【发布时间】:2014-04-04 08:05:31
【问题描述】:

我正在使用 Laravel 的 Toddish/Verify 库,因为它包含了我项目所需的 99%。我只需要添加一些字段。

我已经在迁移中添加了它们,我也想将它们添加到批量创建中:

use Toddish\Verify\Models\User as VerifyUser;

class User extends VerifyUser
{
    public function __construct () {
        array_merge ($this->fillable, array(
            'salutation', 'title', 'firstname', 'lastname', 'phonenumber', 'mobilenumber'
        ));
    }
}

但是,当我运行我的创建测试时:

public function testUserCreation () {
    $user = User::create(
        [
            'username' => 'testusername',
            'email' => 'email@test.com',
            'password' => 'testpassword',
            'salutation' => 'MrTest',
            'title' => 'MScTest',
            'firstname' => 'Testfirstname',
            'lastname' => 'Testlastname',
            'phonenumber' => 'testPhoneNumber',
            'mobilenumber' => 'testMobileNumber',
        ]
    );
    $this->assertEquals($user->salutation, 'MrTest');
    $this->assertEquals($user->title, 'MScTest');
    $this->assertEquals($user->firstname, 'Testfirstname');
    $this->assertEquals($user->lastname, 'Testlastname');
    $this->assertEquals($user->phonenumber, 'testPhoneNumber');
    $this->assertEquals($user->mobilenumber, 'testMobileNumber');
}

我明白了:

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 19 users.username may not be NULL (SQL: insert into "users" ("updated_at", "created_at") values (2014-03-03 09:57:41, 2014-03-03 09:57:41))

在所有涉及用户创建的测试中,好像它在保存模型时忘记了父母属性。

我做错了什么?

【问题讨论】:

标签: php model laravel laravel-4


【解决方案1】:

问题是你覆盖了我假设的 Eloquent 构造函数,所以值永远不会被传递。

__construct 更改为如下所示。

public function __construct(array $attributes = array())
{
    parent::__construct($attributes);

    array_merge ($this->fillable, array(
        'salutation', 'title', 'firstname', 'lastname', 'phonenumber', 'mobilenumber'
    ));
}

Model::create 方法实际上将创建模型的一个新实例并将数组传递给 __construct。您正在覆盖它并阻止它传递信息。

注意如果您决定像在此处所做的那样覆盖核心方法,请始终检查继承并确保您没有破坏任何内容。

【讨论】:

  • 谢谢,由于某种原因错过了。我会尽可能地接受这个作为答案。
  • 没问题,我最近做了类似的事情,并且在扩展我的自定义类时将我的所有模型都完全压缩了。啊哈。
猜你喜欢
  • 2018-06-16
  • 1970-01-01
  • 2014-07-21
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2016-05-27
  • 1970-01-01
相关资源
最近更新 更多