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;
如何将以下 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;