LaravelでローカルスコープをjoinSubすると型があわにゃい2024-02-01

🐈 ハマったこと

Modelはこんにゃ感じ

class City extends Model {
    public function scopeNishitama($query) {
        return $query->where('area', '=', 'Nishitama');
    }

これをjoinSubすると型があわにゃい

DB::table('event')->joinSub(City::nishitama(), 'city', function ($join) {
    $join->on('event.city', '=', 'city.id');
})
  • ローカルスコープが返す型:\Illuminate\Database\Eloquent\Builder
  • joinSubが期待する型:\Illuminate\Database\Query\Builder



・・・🐈‍⬛・・・🐈‍⬛・・・🐈‍⬛・・・


Eloquent\BuilderからQuery\Builderを取得して渡す

DB::table('event')->joinSub(City::nishitama()->getQuery(), 'city', function ($join) {
    $join->on('event.city', '=', 'city.id');
})


7系まで発生。8系で修正されている
https://github.com/laravel/framework/blob/8.x/src/Illuminate/Database/Query/Builder.php#L513