问题:如何触摸同一型号的模型?
详细信息: 我使用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分钟。好像它进入了一个无限循环。
有没有办法触摸同一型号的模型?
答案 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没有对它进行测试,所以不是百分之百确定它会起作用。
或者可以做的是:
手动确保您在保存模型时触摸相关模型