首页 > 解决方案 > JOIN 用 Laravel 中连接表的 id 替换原来的 id

问题描述

我有四张桌子

  1. 链接(id、user_id、link_data、category_id、submit_date)
  2. 用户(id、用户名、密码、状态)
  3. 类别(id,名称,slug)
  4. 标签(id、link_id、标签)

我想用用户名、类别名称和 slug 和标签显示所有链接详细信息,但加入它会将 links.id 替换为 category.id。

$catid = Category::where('slug', '=', $slug)->firstOrFail()->id;

$linksbycategories = DB::table('links')
->where('category_id', '=',$catid)
->join('users', 'users.id', '=', 'links.user_id')
->join('categories', 'categories.id', '=', 'links.category_id')
->join('tags', 'tags.link_id', '=', 'links.id')->get();
return $linksbycategories;
//return view('category', ['linksbycategories' => $linksbycategories]);

我有 3 个链接 id 1 的标签,我得到的结果是第一个链接信息的 3 倍数据,链接 id 为 7,这是该链接的类别 id。我该如何解决这个问题。

标签: laravellaravel-5joinmodel-view-controller

解决方案


请将以下代码添加到链接模型中:

public function User()
{
    return $this->hasOne('App\User','id','user_id');
}
public function Category()
{
    return $this->hasOne('App\Category','id','category_id');
}
public function Tags()
{
    return $this->hasMany('App\Tags ','link_id','id');
}

并对查询进行如下更改:

$linksbycategories = App\Link::with('User','Category','Tags')
->whereHas('Category',function($q) use($slug){
$q->where('slug', '=', $slug);
})->get();

推荐阅读