Laravel:使用WITH和左连接过滤器表数据

时间:2018-05-04 05:09:59

标签: laravel laravel-5.5

在我的查询中加入4个表。我得到了所有回复,但是三个表格具有相同的字段名称' title'这是不匹配的。那么我怎么能解决这个问题。有没有办法在leftjoin之前或leftjoin查询之后过滤我想要的文件。

我的查询如下:

  $userPost =  Post::with(['product','postattributes' => function ($query) {
                        $query  ->leftjoin('attributes', 'attributes.id', '=', 'post_attributes.attribute_id')
                                ->leftjoin('categories', 'categories.id' , '=', 'attributes.category_id');
                    }])->whereUserId($user->id)->whereStatus("Active")
                    ->get();

并回复我GT:

 "postattributes": [
            {
                "id": 1,
                "attribute_id": 1,
                "post_id": 136,
                "created_at": "2018-04-27 18:46:28",
                "updated_at": "2018-04-27 18:46:28",
                "product_id": 1,
                "category_id": 1,
                "parent_id": null,
                "title": "Shape",
                "status": "Active",
                "sort_order": 1
            },
            {
                "id": 1,
                "attribute_id": 2,
                "post_id": 136,
                "created_at": "2018-04-27 18:46:28",
                "updated_at": "2018-04-27 18:46:28",
                "product_id": 1,
                "category_id": 1,
                "parent_id": null,
                "title": "Shape",
                "status": "Active",
                "sort_order": 1
            } 
        ]

现在我想在title as category_title表上使用categories。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用select

 $userPost =  Post::with(['product','postattributes' => function ($query) {
                    $query->select('categories.id', 'attribute_id','post_id', 'created_at', 'updated_at','product_id','category_id', 'parent_id', 'categoris.title as category_title', 'status', 'sort_order')
                          ->leftjoin('attributes', 'attributes.id', '=', 'post_attributes.attribute_id')
                          ->leftjoin('categories', 'categories.id' , '=', 'attributes.category_id');
                }])->whereUserId($user->id)->whereStatus("Active")
                ->get();

select中,您可以设置所需的所有字段,在此示例中,我从列表中添加了所有字段。