【发布时间】:2014-09-22 12:22:02
【问题描述】:
这是交易。我已经使用两个或多或少的表设置了我的数据库,如下所示(实际上,我的表要复杂得多,但这是要点):
TABLE`元素`
- 身份证
- 数据
TABLE `element_drafts`
- 身份证
- element_id
- 数据
您可能可以从名称中猜到,第二个表包含的行是第一个表中行的草稿。 (不要担心推荐更好的方法来做草稿=)我的表格比显示的更复杂,拥有草稿表格是最好的解决方案。
我已经在两个表之间建立了关系,以便可以执行以下操作:
// Get all of the elements along with their draft rows
$elements_with_drafts = Element::with('drafts')->all();
我还可以通过这样做只选择具有草稿行的元素:
$elements_with_drafts = Element::with('drafts')
->whereIn('id', function($query)
{
$query->select('element_id')->from('element_drafts');
})
->get();
但我想做的一件事我想不通:将草稿值复制到其父元素。
最后,我的目标是通过单个查询将所有 element_drafts['data'] 值复制到其父 element['data'] 字段。
我不完全确定这是否可能。是吗?
我的猜测是,它可能会以某种方式完成:
$elements_with_drafts = Element::with('drafts')
->whereIn('id', function($query)
{
$query->select('element_id')->from('element_drafts');
})
->update(array("data" => function($query)
{
// Somehow select the draft value?
});
我觉得我真的很接近,但我不太确定如何做我想做的事。有什么想法吗?
注意:显然,这可以通过 foreach 循环相对轻松地完成,但我希望有一个只是单个查询的解决方案。
【问题讨论】:
标签: laravel laravel-4 eloquent fluent