Laravel Eloquent:如何检索选择中每一列的值数组?

我有一个包含三列的“clients_campaigns”表。用户 ID、公司 ID 和活动 ID。我想获取具有特定 user_id 的所有 company_id 和活动 id 的列表。使用这两个列表,我将搜索另外两个表,Company 和 Campaigns。通过使用每个列表,我将找到与 id 关联的名称。


我不确定如何创建两个包含每种类型 id 的列表。以下是我的尝试和到目前为止的代码。


            $ids = \DB::table('clients_campaigns')->select('company_id','campaign_id')

                                                  ->where('user_id',$request->user_id)

                                                  ->pluck('company_id','campaign_id');

            if($ids !== null){

                //use those id's to retrieve the company names and campaign names

               Company::select('name')->whereIn('id', ...);

               Campaign::select('name')->whereIn('id',...);


达令说
浏览 120回答 2
2回答

冉冉说

如果您真的想这样做,那么您已经不远了,但您真的不需要第一个pluck,因为无论如何只会有 3 个字段。然后,您可以pluck将company_id和campaign_id列分别用于接下来的 2 个查询:$ids = DB::table('clients_campaigns')    ->where('user_id', $request->user_id)    ->get(['company_id', 'campaign_id']);if ($ids->notEmpty()) {    $companyNames = Company::whereIn('id', $ids->pluck('company_id'))        ->pluck('name');    $campaignNames = Campaign::whereIn('id', $ids->pluck('campaign_id'))        ->pluck('name');}如果您在第一个查询中使用 pluck,您将有一个键控列表,campaign_id那么您将不得不只使用查询的键和Campaign查询的值Company。您还可以选择将查询对象传递给whereIn调用。

开满天机

以您当前的示例为例,您可以将第一个查询的结果检索到一个集合中,然后使用该集合为每个后续查询提取结果。将其付诸实践将如下所示:$ids = \DB::table('clients_campaigns')->select('company_id','campaign_id')    ->where('user_id',$request->user_id)    ->get();    ->pluck('company_id','campaign_id');if ($ids->count()) {    //use those id's to retrieve the company names and campaign names    Company::select('name')->whereIn('id', $ids->pluck('company_id'));    Campaign::select('name')->whereIn('id', $ids->pluck('campaign_id'));}
打开App,查看更多内容
随时随地看视频慕课网APP