我想限制一个多对多关系,该多对多关系是由位于数据透视表中的数据加载的.

表_a

表_B

table_pivot (connects 表_a and 表_B many-to-many)

查询应返回具有立即加载的TableB的TableA,但仅当TABLE_PIVET.ACTIVE=TRUE时.

我try 了以下几种方法:

TableA::with(['表_B' => function ($query) { 
    $query->where('table_pivot.active', true); 
    // not sure how to address table_pivot here in the right way
}]);

所有模型都是以推荐的方式设置的(BelongsToMany关系等).

谢谢你在这方面的任何提示.

推荐答案

在WITH函数的闭包中使用WHERE Pivot方法可以快速加载Laravel中的多对多关系,条件取决于透视表.以下是如何更改代码以实现这一点:

在您的模型中提供准确的关系定义:

TableA::with(['tableB' => function ($query) {
    $query->wherePivot('active', true);
}])->get();

Laravel相关问答推荐

Laravel 通过 API 嵌套 url 发布

验证判断请求的值是否存在于另一个表 Laravel 9 中

如何使用 laravel 更新单个值

Laravel 在维护模式下显示自定义消息

使用命令行界面停止 laravel 服务器

将 Laravel 升级到 4.2 后,Artisan::call('migrate') 不起作用

使用 Eloquent 的 Laravel 块方法

Laravel 5.1 是否与 PHP 7 兼容

Laravel 生产问题 - 使用 Laravel 4.1.x 更新composer

如何在 Laravel 中将秒转换为天小时分钟

如何更改 ember-cli 中的 dist 文件夹路径?

如何在 Laravel Eloquent 中 Select 某些字段?

Laravel 规则和正则表达式 (OR) 运算符的问题

我如何从给定的日期时间 struct 创建Carbon 对象?

无法打开laravel.log:无法打开流

Blade 中的条件扩展

Laravel Queue,Beanstalkd vs Database,有什么区别?

Laravel:如何在 PhpUnit 上启用堆栈跟踪错误

Laravel 更新查询

phpunit 命令不适用于 Windows 7 上的 laravel 4