想要使用外键关系获取laravel中当前登录用户的数据但给出重复的行
Posted
技术标签:
【中文标题】想要使用外键关系获取laravel中当前登录用户的数据但给出重复的行【英文标题】:Want to get the data of current login user in laravel using foreign key relationship but gives duplicate rows 【发布时间】:2018-11-03 14:03:46 【问题描述】:我正在尝试使用 laravel 和 mysql 获取当前登录用户的数据,但我得到的结果是存储在数据库中的重复行。 我有三张桌子。 users 表包含 id 作为主键,education 表包含 user_id 作为外键,users 表的主键以及字段 research_area。第三个表是发布表,它也包含 user_id 作为外键。现在我正在尝试获取当前登录用户的所有出版物,包括标题、出版年份和研究领域。我的代码正在运行,但它为我提供了表中存储数据的所有结果。我的代码在这里给出。
控制器代码为 PdfController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use PDF;
use Auth;
class PdfController extends Controller
public function publicationpdf()
$user_id = Auth::user()->id;
$data['data'] = DB::table('users')
->join('publications', 'users.id', '=', 'publications.user_id')
->join('education', 'users.id', '=', 'education.user_id')
->select('users.id','publications.*','education.research_area')
->where('users.id',$user_id)
->get();
if(count ($data)>0)
return view('pdf/publicationpdf',$data);
else
return view('pdf/publicationpdf');
我的观点是publicationpdf.blade.php,这里给出了它的代码。
@extends('layouts.app')
@section('content')
<div class="container"><br>
<h4>Name: Auth::user()->tname </h4>
<div class="text-center">
<h3>Publications Details</h3>
</div><br/>
<table class="table">
<tr>
<th>
Publication Title
</th>
<th>Research Area</th>
<th>Publication Year</th>
</tr>
@foreach($data as $value)
<tr>
<td>$value->title</td>
<td>$value->research_area</td>
<td>$value->year</td>
</tr>
@endforeach
</table>
</div>
@endsection
我的路线就在这里。
Route::get('pdf/publicationpdf','PdfController@publicationpdf');
我不知道如何每行只获取一次登录用户的所有发布,但是它给了我重复的行,我的意思是一行的三个副本,它没有显示任何错误,但返回了用户的重复数据。请帮忙。提前致谢
图片在这里
我的桌子在这里。 出版物表。
【问题讨论】:
【参考方案1】:试试这个: 您应该在用户表中添加 id=logged in user id 的位置。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use PDF;
use Auth;
class PdfController extends Controller
public function publicationpdf()
$user_id = Auth::user()->id;
$data['data'] = DB::table('users')
->join('publications', 'users.id', '=', 'publications.user_id')
->join('education', 'users.id', '=', 'education.user_id')
->select('users.id','publications.*','education.research_area')
->where('users.id',$user_id) // else it will get all rows
->get();
if(count ($data)>0)
return view('pdf/publicationpdf',$data)->with($user_id);
else
return view('pdf/publicationpdf');
【讨论】:
我在数据库中只有两条当前登录用户的记录,但它给了我 6 行我的意思是 3 次一行。我只想要一次 嗨,是的,我尝试了 where 方法,但我得到了 6 行,但数据库中只有两行相同的登录用户。 你可以使用 DB::table('users') ->join('publications', 'users.id', '=', 'publications.user_id') ->join 发布查询吗('education', 'users.id', '=', 'education.user_id') ->select('users.id','publications.*','education.research_area') ->where('users. id',$user_id)->toSql(); Bro 在最后添加 toSql() 而不是 get() 并回显它会给你 sql 查询,如果你不使用调试栏 为 foreach() 提供的参数无效(查看:C:\xampp\htdocs\prolearning\resources\views\pdf\publicationpdf.blade.php)【参考方案2】:对于特定用户,您的教育表中有多少行?您得到的结果是正常的,因为您的子表发布或教育中有多条记录。
【讨论】:
在我的子表中,特定用户只有两行。 如果你尝试这个,你会得到什么? DB::table('publications') ->where('users.id',$user_id) ->get(); 我得到的结果不止两行,而出版物表中有两行供当前登录用户使用。 当您直接在 phpmyadmin 中运行查询时,是否得到相同的结果? 不能直接运行,不知道怎么运行以上是关于想要使用外键关系获取laravel中当前登录用户的数据但给出重复的行的主要内容,如果未能解决你的问题,请参考以下文章
如何从 laravel 的 eloquent 集合中获取外键