laravel - JOIN 用 Laravel 中连接表的 id 替换原来的 id
问题描述
我有四张桌子
- 链接(id、user_id、link_data、category_id、submit_date)
- 用户(id、用户名、密码、状态)
- 类别(id,名称,slug)
- 标签(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。我该如何解决这个问题。
解决方案
请将以下代码添加到链接模型中:
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();
推荐阅读
- ruby - 这段 Ruby 代码有什么问题?为什么地图代码块后数组为空?
- linux - BASH,if 语句未按预期运行
- spring - Spring data rest - 复合主键的发布请求
- vim - vimrc:仅对某些文件类型执行多行
- java - 带有类对象的 Java 集合不起作用
- php - 无法创建新信号量,因为“设备上没有剩余空间” - 我似乎超出了信号量数组数量的限制
- python - 非结构化数据,NLP Lemmatize 书评
- java - Maven 生成没有资源的 Spring 和 Thymeleaf 应用程序
- python - Pandas 在数据框获取 df.style 后创建一个新列
- html - Safari 中的插入符号问题与 contenteditable SVG