when与with 的使用
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
// 在模型
class Advs extends Model
{
// 一对一
public function cont()
{
// 前面的id为 Details 的id, 后面的id为 Advs 的id.
return $this->hasOne(Details::class, 'id', 'id');
}
public function selectInfo(int $state, $search = null): object
{
return self::query()
->when($state, fn($query) => $query->where('state', $state))
->with([
'cont' => (fn($query) => $query->select('id', 'content'))
])
// 多条件模糊搜索
->where(function($query) use($search){
$query->where('tel', 'like', "%$search%");
$query->orWhere('name', 'like', "%$search%");
})
// 关联模型条件搜索
->when($search !== null, fn($query) => $query
->whereHas('cont', function (Builder $query) use ($search) {
$query->where('content', 'like', "%$search%");
}))
->select('id', 'name', 'brief', 'created_at')
->get();
}
}
上一篇或下一篇
latest 和 oldest 方法让你以一种便捷的方式通过日期进行排序。它们默认使用 created_at 列作为排序依据。当然,你也可以传递自定义的列名
// 上一篇
public function lastInfo($id)
{
return self::query()->where('id', '<', $id)
->latest('id')
->select('id', 'title')
->first();
}
// 下一篇
public function nextInfo($id)
{
return self::query()->where('id', '>', $id)
->oldest('id')
->select('id', 'title')
->first();
}