Laravel Eloquent 而不是查询构建

Laravel Eloquent instead of Query Build

如何将以下 Laravel (v8) 查询转换为 Eloquent?这可能吗?

'house_id' => DB::table('houses') ->select('id') ->where('user_id', Auth::user()->id) ->orderByDesc('created_at')->value('id')

当前查询正在执行这项工作,但我很想知道是否可以使用 Eloquent 来完成同样的工作。换句话说,有更优雅的方法来做同样的事情吗?

抱歉,如果我的问题没有任何意义。

非常感谢您的澄清。

如果您的模型名为 House$house = House::query()->where('user_id', Auth::user()->getAuthIdentifier())->select('id')->orderBy('created_at', 'DESC')->get() 或如果您只想获取一个元素,请使用 ->first()。然后你可以调用$house->id.

Laravel 在查询生成器上有一个 latest() 函数,它按 created_at 日期对结果进行降序排序。因此,您可以将查询简化为如下:

House::where('user_id', Auth::user()->id)->latest()->first()->id;

这可能看起来令人困惑,latest()->first(),但是 latest() returns 一个 collection 所以如果你使用 first() 访问最近的记录然后从模型中获取 id

如果您发现自己经常使用上述内容,您可以更进一步,在您的 User 模型上定义一个 scope

public function houses()
{
    return $this->hasMany(House::class);
}

public function scopeLatestHouse(Builder $query) {
    return $this->houses()->latest()->first();
}

现在您需要做的就是:

$latestHouse = Auth::user()->latestHouse()->id;