laravel如何对hasmany进行子查询/自定义关系查询

gblwokeq  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(452)

我在分组时遇到了这个问题 account_name 以及 ad_name ,但有些记录具有相同的 account_name 以及 ad_name 当有不同的 ad_id s(我用它来连接我的关系)-所以我最终没有连接我所有的记录。

...

        $selectList = [
            DB::raw("any_value(ad_id) as ad_id"),
            DB::raw("ad_name"),
            ...
        ];

        $query = Facebook::query()
            ->with(['cake:subid_1,price'])
            ->select($selectList)
            ->groupBy('ad_name', 'account_name');

      ...

我的关系是这样的:

public function cake()
    {
        return $this->hasMany(Cake::class, 'subid_1', 'ad_id');
    }

这是它产生的基本查询:

但我认为真正能解决我问题的是这样一个问题:

SELECT `price`,
       `subid_1`
FROM `cake_performance_data`
WHERE `cake_performance_data`.`subid_1` IN
    (SELECT ad_id
     FROM cake_performance_data
     WHERE ad_name IN ($arrayOfAdNames))

我能不能用雄辩的或者其他的解决方案来实现同样的最终目标呢。

mpbci0fu

mpbci0fu1#

我想你有 $adNames 在上下文中,现在您的代码不包含它。
你可以过滤你的信息 with() 使用和键值语法。其次,可以在中使用子查询 WhereIn() 通过关闭。

->with(['cake' => function ($query) use ($adNames) {
    $query->whereIn('subid_1', function ($query) use ($adNames) {
        $query->select(['ad_id'])
            ->from((new Cake)->getTable())
            ->whereIn('ad_name ', $adNames);
    });
}]);

相关问题