尝试从两个不同的表中检索 'name column' 中的名称

Trying to retrieve names from 'name column' from two different tables

我正在尝试从 categories table 和 brands table 中提取名称列。 brand_user table 是 brandsusers 之间的 bridge/pivot table,因此我可以根据用户 ID 提取品牌。

问题是我的输出只给出了结果中的 categories 名称列,而省略了 brands 名称。我试过左右连接,但问题仍然存在。似乎我不应该调用 brands 名称列 brand_name 和类别名称列 category_name,但目前这是我能想到但更愿意的唯一解决方案尽可能不(如果不这样做有意义的话)。

所以我的问题是,我应该让每个 table 的名称列都是唯一的,还是可以使用 name 作为 table 的通用名称列? ?

return DB::table('brands')
            ->join('categories', 'categories.id', '=', 'brands.category_id')    
            ->join('brand_user', 'brand_user.brand_id', '=', 'brands.id')
            ->select('brands.name', 'categories.name')
            ->where('user_id', Auth::user()->id)
            ->get();

看来我可以为它们添加一个别名,它可以解决列名不明确的问题。

return DB::table('brands')
            ->join('categories', 'categories.id', '=', 'brands.category_id')    
            ->join('brand_user', 'brand_user.brand_id', '=', 'brands.id')
            ->select('brands.name as bName', 'categories.name as cName')
            ->where('user_id', Auth::user()->id)
            ->get();

如果您对 Eloquent 和 Laravel 方式感兴趣,并且您已经在品牌和用户之间建立了多对多关系,并且在品牌和类别之间建立了一对多关系,您可以以这种方式遍历品牌和类别。

$brands = Brand::whereHas('users', function($query) {
        $query->where('users.id', auth()->id());
    })
    ->with('category')
    ->get();

foreach($brands as $brand) {
    echo $brand->name .' ' .$brand->category->name;
}

您可以在此处查找 Eloquent 关系的更多详细信息 https://laravel.com/docs/8.x/eloquent-relationships