我不知道如何解决我的问题.

我有Model1个亲戚:

class Model1 extends BaseModel
{
    public function details(): BelongsToMany
    {
        return $this->belongsToMany(
            Detail::class,
            'model1_details',
            'model1_id',
            'detail_id',
        );
    }
}

model1_details是我的数据透视表.

我也有类似[1, 2, 3]的详细信息IDarray. 我需要用给定的ID取回属于所有DetailModel1.

我需要在我的过滤器里做这件事. 这就是我的控制器里的东西:

$builder = Model1::filter(new ModelListFilter($request));

而在ModelListFilter内部:

protected function filter(): Builder
    {
        $request = $this->request;

        $request->whenFilled('details', function ($query) {
            //
        });

        return $this->builder;
    }

我试过了:

$request->whenFilled('details', function ($query) {
            foreach($query as $detailId) {
                $this->builder->whereHas('details', function (Builder $innerQuery) use ($detailId) {
                    $innerQuery->where('detail_id',  $detailId);
                });
            }
        });

但它返回所有模型Model 1,即使没有任何详细信息.

UPD

所以问题不在那里=)'details'在我的申请中没有填写. 另外,我的$query是一个字符串,而不是数组,所以我对它调用了json_decode.

上面的代码检索属于id=1的Detail和id=2的Detail的模型,依此类推.

但我认为可能有更好的解决方案,所以我把这个问题留待解决

UPD 2

也改变了这一点

$innerQuery->where('detail_id',  $detailId);

对此

$innerQuery->where('id',  $detailId);

所以这里需要传递我们在‘Details表’中的列,而不是来自数据透视表的列

推荐答案

找到了我的问题的解决方案here.因此,似乎没有更好的解决方案(

Php相关问答推荐

Laravel有一个具有两个匹配字段

邮箱打开跟踪器不工作时发送邮件使用laravel调度程序

Yahoo Finance API文件_GET_CONTENTS 429请求太多

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

Laravel数据表在一个视图中传递两个实例

如何删除WordPress用户的个人资料描述或其他个人资料字段中的链接?

如何删除Foreach语句中的重复值?

如何使用php一次更新两个数据库中的MySQL表

WooCommerce在购物车项目中复制产品而不增加产品数量

Filament v3:具有 hasMany 和 BelongsTo 的关系管理器

显示自定义 Laravel 9 公共属性的错误

WooCommerce 以编程方式添加的费用不会持续存在

WooCommerce 中一件免费产品的数量折扣

将 PHP 版本更改为 8.1,但 WordPress 认为我们正在使用版本 7.4?

无法在 Laravel 中实例化抽象类 ProductAbstract

在 mysql 上的 PDO 中启用自动提交并将自动提交设置为关闭

WooCommerce - 调用功能ID不正确.不应直接访问订单属性

使用 PHP 正则表达式从仅包含具有现有顺序的顶级标签的 XML 文档中搜索和创建数组

password_verify 在 PHP 7.4 中有效,但在 PHP 8.2 中无效

一个php应用程序可以实例化多个RNG吗