Laravel触摸(递归)

时间:2017-08-01 18:18:28

标签: php laravel laravel-5

问题:如何触摸同一型号的模型?

详细信息: 我使用Laravel 5.4构建了一个在人与人之间租借书籍的应用程序。 在每笔交易中,有两部分:关于所有者的信息VS关于出租书籍的人的信息。

因为双方,我选择只使用一个名为rents的表格用于双方。要区分哪个是我添加了包含'所有者'的字段rent_side。或者“借款人”。 如果我想显示/搜索某个人的历史记录,这很容易。如果有2个以上的表,我将不得不让UNION选择显示历史记录所需的所有数据。

这两个方面由于名为couple_id的共同ID而耦合在一起。

从每一方面,我都可以看到相反的一方,这要归功于位于模型App\Rent中的方法我命名为reverse,我在其中执行以下操作:

public function reverse()
{
    return $this->hasOne('App\Rent', 'couple_id', 'couple_id')
        ->where('id', '!=', $this->id);
}

因为我需要更新父时间戳,并且根据laravel documentation我使用了以下内容:

protected $touches = ['reverse'];

问题在于这种触摸会影响同一型号。因此,当我更新/插入新记录时,请求在发送错误之前需要4分钟。好像它进入了一个无限循环。

有没有办法触摸同一型号的模型?

1 个答案:

答案 0 :(得分:0)

源代码here确实表明它会导致无限循环。

我建议你做以下事情:

class Rent extends Model {
      protected $touches = [ "reverse" ];

      protected function touchOwners() {
           static $recursionCount = 0;
           if ($recursionCount <= 1) {
              $recursionCount++:
              parent::touchOwners();
           } else {
             $recursionCount=0;
           }
      }
}

Haven没有对它进行测试,所以不是百分之百确定它会起作用。

或者可以做的是:

手动确保您在保存模型时触摸相关模型