【问题标题】:JOIN replaces the original id with the id of joined table in LaravelJOIN 用 Laravel 中连接表的 id 替换原来的 id
【发布时间】:2020-01-14 07:07:15
【问题描述】:

我有四张桌子

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

我想使用用户名、类别名称和标签和标签显示所有链接详细信息,但加入它会将 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。我该如何解决这个问题。

【问题讨论】:

  • 您是否尝试在其中添加 ->select() 以准确指定您想从查询中收集的内容..
  • 是的@Petay87 我做了但是它不会显示任何连接数据,我只得到链接表数据。
  • 如果不使用 DB::table 而是使用模型 so links::where 会怎样
  • links::where 结果相同。

标签: laravel laravel-5 join model-view-controller


【解决方案1】:

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

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();

【讨论】:

  • 成功了,谢谢@brinda-fadadu 你能帮我分页吗?如何在刀片视图中获得分页。 {{$data->links()}} 不起作用。
  • 你必须添加->paginate(15);而不是->get();
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多