如何使用 eloquent / etc 与 laravel 编写关系函数?

Posted

技术标签:

【中文标题】如何使用 eloquent / etc 与 laravel 编写关系函数?【英文标题】:how to write function in relationship using eloquent / etc with laravel? 【发布时间】:2022-01-16 15:32:38 【问题描述】:
$data = Program::with('peserta', function ($query) 
                return $query->peserta()->whereBetween('tanggal', array($request->from, $request->until));
            )->get();

此代码返回错误:

mb_strpos() 期望参数 1 是字符串,给定对象", 异常:“ErrorException”。

帮助。谢谢

【问题讨论】:

尝试 $data = Program::with('peserta', function ($query)use($request) return $query->whereBetween('tanggal', array($request->from , $request->until)); )->get(); 【参考方案1】:

with() 中的闭包函数必须是数组并删除该return。 Example in laravel doc

$data = Program::with(['peserta' => function ($query) use($request) 
                $query->whereBetween('tanggal', array($request->from, $request->until));
            ])->get();

【讨论】:

感谢先生的解释。我忘了检查文档 @FebriTahta 不客气【参考方案2】:

你应该使用 whereHas 来设置关系条件:

$data = Program::whereHas('peserta', function ($query)use($request) 
     return $query->whereBetween('tanggal', array($request->from, $request->until));
 )->get()

如果您需要有关系数据,应在查询中添加“with”:

$data = Program::whereHas('peserta', function ($query)use($request) 
     return $query->whereBetween('tanggal', array($request->from, $request->until))->with('peserta');
  )->get()

【讨论】:

谢谢先生。我尝试使用此代码,它也可以工作

以上是关于如何使用 eloquent / etc 与 laravel 编写关系函数?的主要内容,如果未能解决你的问题,请参考以下文章

我收到此错误:类 Illuminate\Database\Eloquent\Builder 的对象无法在 laravel ORM 中转换为字符串

如何使用 Laravel 的 Eloquent 关系与 Eager Loading 连接 3 个表?

如何使用 Eloquent 对分组结果排序?

Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?

如何在 Eloquent 模型中使用 Laravel Livewire?

Eloquent 中与分类学的多对多关系