【问题标题】:Laravel eager loading using data inside itselfLaravel 使用自身内部的数据进行预加载
【发布时间】:2015-04-13 21:15:04
【问题描述】:

我正在尝试在 Laravel 的一些急切加载中使用数据。

我有一个“传感器”表,在另一个表中有许多“测量值”。

我需要每小时检查一次传感器的每个测量值。当我这样做时,它会保存在“sensors.last_checked_measurement”中检查的测量的最后一个 ID

$sensors = Sensor::with(array('measurements' => function($query) {
    $query->where('id', '>', SENSOR.LAST_CHECKED_MEASUREMENT); // <-- in between data
}))->get();

你可能知道,这个翻译成

"select * from 'sensors'"
"select * from `measurements` where `measurements`.`sensor_id` in (?, ?) and `id` > ?"

如果 Laravel 可以使用第一个查询的结果来获取下一个查询的 sensor_id,也许可以做到,对吧?

所以我的问题:

如何在急切加载中使用“SENSOR.LAST_CHECKED_MEASUREMENT”?

【问题讨论】:

  • 第一个代码块不是做你想做的吗?您能否准确说明您要达到的目标?
  • SENSOR.LAST_CHECKED_MEASUREMENT 它应该在“传感器”的表内,直到我在 with() 之后得到 get() 它才能使用。

标签: php laravel eager-loading


【解决方案1】:

你试过 db::raw 吗?

$sensors = Sensor::with(array('measurements' => function($query) {
    $query->where('id', '>', DB::raw('SELECT LAST_CHECKED_MEASUREMENT FROM SENSOR ORDER BY ID DESC LIMIT 1'));
}))->get();

【讨论】:

  • 这看起来像他们要求的。
  • 也许是这样,但不是我要问的。
  • 这个想法是使用来自第一个查询的数据到第二个查询。查看 SQL 翻译。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多