Laravel数据库查询提供了一组与直接MySQL查询不同的结果

时间:2017-03-01 10:14:20

标签: mysql laravel-5 laravel-eloquent

我的数据库是:

|category_id|category_slug |category_name |parent_category_id|
|1          |Main Category1|Main Category1|0                 |
|2          |Main Category2|Main Category2|0                 | 
|3          |Sub Category1 |Sub Category1 |1                 |
|4          |Sub Category2 |Sub Category2 |1                 |
|5          |Sub Category3 |Sub Category3 |2                 |

我正在尝试在MySQL中执行以下查询

SELECT *
FROM categories AS subcategory 
JOIN categories AS parent ON parent.category_id = subcategory.parent_category_id 
WHERE subcategory.category_display_type = 'sidebar'
  AND subcategory.category_visibility = 1
像这样:

class SidebarnavComposer
{
    public function compose(View $view)
    {
        $params = DB::table('categories as subs')->join('categories as cats', function($join){
                $join->on('subs.parent_category_id', '=', 'cats.category_id')
                ->where('subs.category_display_type', '=', 'sidebar')
                ->where('subs.category_visibility', '=', 1);
    })->get();


        $view->with('subcategories', $params);

    }

问题是我得到了不同的结果。

当我在MySQL中直接使用第一个查询时,我得到以下内容:

category_id
category_id1
category_title
category_title1
category_slug
category_slug1
.......

当我在laravel应用程序中执行第二个查询时,我得到以下结果:

category_id
category_title
category_slug
.......

这基本上意味着我无法访问所有必要的列。

所以我需要做的是以下列方式为我的子类别构建URI:

category_slug1/category_slug

其中category_slug1是主要类别slug,category_slug是子目录slug。问题是我只获得了主要的类别slug,并且无法在URI中获得子类别的slug。

我不确定我做错了什么因为我是laravel的新手,而且此刻并不是很了解,所以如果可以,请帮助我

1 个答案:

答案 0 :(得分:1)

使用此:

$data = DB::table('categories AS subcategory')
        ->join('categories AS parent', 'parent.category_id', '=', 'subcategory.parent_category_id')
        ->where('subcategory.category_display_type', '=', 'sidebar')
        ->where('subcategory.category_visibility', '=', 1)
        ->select('subcategory.category_slug AS category_slug1', 'parent.category_slug AS category_slug')
        ->get();