Хотите получить данные текущего логина пользователя в laravel, используя отношение внешнего ключа, но выдает дублирующиеся строки - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь получить данные текущего логина, используя laravel и mysql, но в результате получаю дублирующиеся строки результатов, хранящиеся в базе данных. У меня есть три стола. таблица users, содержащая id в качестве первичного ключа, таблица образования, содержащая 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');
                }
     }

На мой взгляд это публикация pdf.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');

Я не знаю, как получить все публикации пользователя для входа в систему только один раз в каждой строке, но это дает мне повторяющиеся строки, я имею в виду три копии одной строки, не выдает никакой ошибки, но возвращает дублированные данные пользователя. Пожалуйста помоги. Заранее благодарен

Изображение здесь result of above running view

Мои таблицы приведены здесь. таблица публикаций. publications table

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Сколько строк в вашей учебной таблице у вас есть для этого конкретного пользователя? Результат, который вы получаете, является нормальным, потому что у вас есть несколько записей в публикации или образовании ваших дочерних таблиц.

0 голосов
/ 03 ноября 2018

Попробуйте это: Вы должны добавить, где таблица пользователя имеет идентификатор = вошли в систему идентификатор пользователя.

<?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');
            }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...