Laravel Eloquent присоединиться к столу - PullRequest
0 голосов
/ 19 сентября 2018

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

Пользователи

id    username
1     test1
2     test2
3     test3

Таблица результатов

id    user_id    points
1     1          52
2     2          62
3     3          12

А теперь я хочу получить все оценки и заменить user_id фактическим именем пользователя.Вот мой код:

ScoresController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Score;
use App\Http\Resources\Score as ScoreResource;

class ScoresController extends Controller
{
    public function index()
    {
        $scores = Score::with('user')->paginate(4);

        return ScoreResource::collection($scores);
    }
}

Score.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Score extends Model
{
    public function user(){
        return $this->belongsTo(User::class,'user_id');
    }
}

Пользователь

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Score;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    protected $fillable = [
        'username', 'email', 'password', 'avatar'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function scores(){
        return $this->hasMany(Score::class,'user_id');
    }
}

И счет ресурса

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Score extends JsonResource
{
    public function toArray($request)
    {
        return [
            'username' => $this->user_id,
            'points' => $this->points,
        ];
    }
}

В данный момент я показываю user_id и точки, я пытался с

$this->username OR $this->user-id->username

, но ни один из них не работает, и я знаю, что могу использовать DB или необработанный SQL, но я хочу сделать это такспособ

1 Ответ

0 голосов
/ 19 сентября 2018

Прочитайте это: https://laravel.com/docs/5.7/eloquent-relationships

foreach ($scores as $score) {
    echo $score->user->username;
}

Или в Blade:

@foreach ($score as $score)
    <p>{{ $score->user->username }}</p>
@endforeach

Сначала вы должны получить доступ к «свойству», которое является именем, которое вы определили для функции, которая обрабатываетотношения.В вашем случае это user.
. После этого вам будет возвращен класс User для этого пользователя, где вы сможете получить доступ к любым свойствам, которые вам нравятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...