Laravel在Eloquent中使用with()方法的错误

uelo1irk  于 2023-06-24  发布在  其他
关注(0)|答案(3)|浏览(162)

我试图在Laravel Eloquent ORM中使用with()方法调用,但得到以下错误。
传递给App\Http\Controllers\DashboardController::App\Http\Controllers{closure}()的参数1必须是Illuminate\Database\Eloquent\Builder的示例,Illuminate\Database\Eloquent\Relations\HasMany给定
我使用的是Laravel 6的最新版本。你知道是什么造成的吗?

控制器

class DashboardController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth:api');
    }

    public function formIndex(Request $request)
    {
        $id = auth()->user()->id;
        $item = Groupe::find($id)->with(
            [
                'etudiants' => function (Builder $query) {
                    $query->select('id');
                }
            ]
        )->first();

        return $item;
    }
}

型号

class Groupe extends Authenticatable implements JWTSubject
{
    public function etudiants()
    {
        return $this->hasMany('App\Etudiant');
    }
}
sirbozc5

sirbozc51#

这个错误来自于你在$query变量上的类型提示,因为错误消息说传入的对象是一个关系,而不是一个原始的查询构建器。删除类型提示即可。另外,::find()执行一个查询,因此您将执行2个查询,请改用下面的查询

Groupe::where('id', $id)->with(['etudiants' => function ($query) {
        $query->select('id');
    }])->first();

此外,您不需要使用回调语法来只即时加载某些列,回调语法用于对返回的记录设置约束。试试这个

Groupe::where('id', $id)->with('etudiants:id,name,email')->first();
kokeuurv

kokeuurv2#

但你想要什么回报?groupe->students[]??你可以用

$item = Groupe::where('id',$id)->with('etudiants')->first();
63lcw9qa

63lcw9qa3#

le probleme viens图斯simplement de limport du builder utilize ceci“use Illuminate\Contracts\Database\Eloquent\Builder;“

相关问题