我遇到这种情况:
1. $ model = Model :: where(someCondition);
在上面的代码之后我对$ model子关系做了一些更新,模型有设置关系,所以我更新它们并将它们保存到db。
然后我稍后尝试访问$ model->设置,我只得到上面的时间(1)的设置,而不是我刚刚添加并保存到db的所有设置。
我发现自己必须在对设置进行一些更新后再次执行此操作,以便加载已添加到db表的新设置。
所以我重复这一行 $ model = Model :: where(someCondition);
能够执行此$ model->设置并从db获取新数据。
这是必须如何完成的,还是有办法刷新关系,以便从db获取最新数据,而不是使用我第一次创建模型时的数据?
希望你理解我的意思。
这里有一些代码:
$tBlock = TemplateBlock::set($template_id, $blockData, $parentId);
// remove settings from db that have default values
foreach ($tBlock->getSettingsNoDefaults() as $baseKey => $value) {
if(!array_key_exists($baseKey, $blockData->settings)) {
$tBlock->removeSetting($baseKey);
}
}
// only save settings that have been customized by user
foreach ($blockData->settings as $key => $setting) {
$tBlock->setSetting($key, $setting['value'], $setting['type']);
}
// refresh the block so we get latest settings
$tBlock = TemplateBlock::where('tblock_id', $template_id);
$settings = $tBlock->settings;
setSetting函数如下所示:
public function setSetting($key, $value, $type = 'string')
{
$setting = $this->settings()->updateOrCreate(
['key' => $key],
['key' => $key, 'value' => $value, 'type' => $type]
);
return true;
}
注意我必须通过以下方式再次获得tBlock:
$tBlock = TemplateBlock::where('tblock_id', $template_id);
它给了我我追求的东西,但它感觉如此不优雅,有更好的方法吗?
答案 0 :(得分:3)
$model->load('relationship')
会懒得急切地加载这段关系。