想要使用外键关系获取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 中的多提供者关系用户表

laravel中的模型关联之(一对一)

如何从 laravel 的 eloquent 集合中获取外键

如何在laravel中获取嵌套关系的数据

在 laravel eloquent 中获取除当前登录用户之外的所有用户

如何通过 Laravel 中的外键检索数据?