考虑到父 table 使用 Eloquent,如何从子 table 获取最后一个值?
How to get the last value from a child table considering the parent table using Eloquent?
我有两张桌子
传感器
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Measurement;
class Sensor extends Model
{
use HasFactory;
protected $table = 'sensors';
public function measurements(){
return $this->hasMany(Measurement::class);
}
}
和测量
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Sensor;
class Measurement extends Model
{
use HasFactory;
protected $table = 'measurements';
public function sensor() {
return $this->belongsTo(Sensor::class);
}
}
一个传感器可进行多项测量。
我想要做的是检索为每个传感器完成的最后测量
如果我有 3 个传感器,我想要传感器 1 的最后一次测量,然后是传感器 2 的最后一次测量,依此类推...
我试过这样做:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Measurement;
use App\Models\Sensor;
use Inertia;
class SensorsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$sensors = Sensor::with( ['measurements' => function ($query) {
$query->latest('created_at')->first();
} ] )->get();
return Inertia\Inertia::render('Sensor', compact('sensors'));
}
在索引函数中,我实现的是对数据库中的每个传感器进行绝对的最后一次测量,而不是最后一次测量。
我怎样才能达到这个目的?
您可以使用 'hasOne' 关系只获取 Senser 的一条记录 ...
和 latest() 按 created_at 列排序
class Sensor extends Model
{
public function lastMeasurement(){
return $this->hasOne(Measurement::class)->latest();
}
}
在你的控制器中你可以正常加载它
$sensors = Sensor::with( ['lastMeasurement' ] )->get();
我有两张桌子
传感器
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Measurement;
class Sensor extends Model
{
use HasFactory;
protected $table = 'sensors';
public function measurements(){
return $this->hasMany(Measurement::class);
}
}
和测量
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Sensor;
class Measurement extends Model
{
use HasFactory;
protected $table = 'measurements';
public function sensor() {
return $this->belongsTo(Sensor::class);
}
}
一个传感器可进行多项测量。 我想要做的是检索为每个传感器完成的最后测量 如果我有 3 个传感器,我想要传感器 1 的最后一次测量,然后是传感器 2 的最后一次测量,依此类推...
我试过这样做:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Measurement;
use App\Models\Sensor;
use Inertia;
class SensorsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$sensors = Sensor::with( ['measurements' => function ($query) {
$query->latest('created_at')->first();
} ] )->get();
return Inertia\Inertia::render('Sensor', compact('sensors'));
}
在索引函数中,我实现的是对数据库中的每个传感器进行绝对的最后一次测量,而不是最后一次测量。 我怎样才能达到这个目的?
您可以使用 'hasOne' 关系只获取 Senser 的一条记录 ...
和 latest() 按 created_at 列排序
class Sensor extends Model
{
public function lastMeasurement(){
return $this->hasOne(Measurement::class)->latest();
}
}
在你的控制器中你可以正常加载它
$sensors = Sensor::with( ['lastMeasurement' ] )->get();