HasOne关系在保存

时间:2017-01-03 23:03:36

标签: laravel-5.3 has-one

我在B的b_id上有两个模型A和B,外键在id的A上。模型代码如下

A具有特征BB,具有以下方法

public function b() // shared by multiple models
    {
        return $this->hasOne(B::class, 'id', 'b_id'); // table has foreign keys setup
    }


public function saveB($params){
$b = $this->b;
        if(is_null($b)) $b = new B;
        else $b->a()->dissociate($b->id); // if there is a b break the link between them

        if($b->setParams($params) === true)
        {
          try {
            $this->b()->save($b);
            $this->save();
          } catch (Exceptio ....... throw an exception if anything
}

B是方法

的模型
public method setParams($params) {
        $this->trigger = $params[0];
       $this->colour = $params[1];
  .... arbitrary stuff not related;
}

问题出现在以下 TestCase 逻辑

public function setUp()
  {
    parent::setUp();

    $this->a = A::find(237); // actual record
    $this->a->saveB(['trigger'=>1,'colour'=>'orange']);
  }
public function testSaveB(){ 
$this->assertGreaterThan(0, $this->a->b_id); 
}

assertGreaterThan测试失败,即使以下内容为真,b_id为null

  • 表外键存在
  • 适当的字段可填写
  • 插入B的数据(不存在先前的记录)
  • 记录存在,b_id从一开始就是NULL
  • 不会抛出异常

请注意,模型名称已经更改,以便更容易理解,但功能或多或少与我的功能完全相同

此逻辑model->hasOne()->save(model)是否会插入新创建的模型并为其更新外键?或者我是否还要更新密钥/值和$ a-> update()而不是$ a-> save()?

0 个答案:

没有答案